UIViewのframeとboundsの違いとは?

今回、UIImageを自分で合成しようとしていろいろと調べてみて、なんとなくでしか理解してないことがよく分かった。
ということで、自分の理解を改めて確認するために、UIViewの持っているframeとboundsの違いを書いてみることに。

frameとboundsの型は?

どちらも、CGRect型。CGRectは構造体で、内部に、originとsizeという変数をCGPoint型とCGSize型で持っている。
CGPointは、2次元の座標情報を保持することができるようになっていて、この場合は、originという名前の通り、原点を表す。
CGSizeは、2次元での大きさ情報を保持することができるようになっていて、この場合は、sizeという名前の通り、UIViewの大きさを表している。

frameとは?

UIViewの持っているframeの値は、親ビューの座標系の中での自分のビューの原点とサイズを持っている

boundsは?

では、boundsは何かというと、自分の座標系の中でのビューの原点とサイズになる。

結局違うの?

sizeについては、基本同じ数字が入っている気がする。transformかけたりすると、変わる。
originについては、親ビューの座標か、自分座標かなので、意味が全然違います。

いずれも、結構似ている数字が入っているので、気をつけて使い分けないと基本的なケースでのテストでは気づかずに、ハマりそう。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です