UIView の位置やサイズを知るプロパティに frame と bounds があります。この frame とbounds の違いを簡単にまとめて見ました。

簡単にまとめると以下のようになります。

  • frame はスーパービューから見た座標
  • bounds はローカルのビューから見た座標


実際に親子関係のビューを作成して確認してみます。

スクリーンショット(2010-04-03 4-3土 17.38.13)

ViewB は ViewA の中に配置されています。
[ViewA addSubView:ViewB] のような関係です。

この時の frame と bounds はそれぞれ以下のようになります。
ViewA.frame origin: 0,0 size: 550×400
ViewA.bouns origin: 0,0 size: 550×400

ViewB.frame origin: 200,100 size: 200×250
ViewB.bounds origin: 0,0 size: 200×250

次に以下のように45度 ViewB を回転させてみます。
ViewB.transform = CGAffineTransformMakeRotation(M_PI/4);
のようにしました。

スクリーンショット(2010-04-03 4-3土 17.49.56)

この時の frame と bounds はそれぞれ以下のようになります。
ViewB.frame origin: 140,65 size: 320x320
ViewB.bounds origin: 0,0 size: 200x250

上記のように回転させるとスーパービューから見る frame は座標位置もサイズも変わりますが、ローカルのビューで見る bounds は座標位置、サイズともに変わりありません。

非常に基本的なことですが、このことを頭に入れておけば frame か bounds のどちらを使うか迷わなくなると思います。

関連する投稿