UIViewのフレーム、境界、中心、原点、いつ使用するのですか?


195

UIView特性を有しframeboundscenter、そしてorigin、彼らはすべて相互に関係しているようです。ほとんどのframe場合、の位置とサイズを設定するときに扱いUIViewます。私はそれframeがグローバル座標系をbounds使用し、ローカルビューの座標を使用している(したがって、そのxとyは0ですが、常にではない)ことを理解していますが、何を使用するかはまだわかりません。

どのような状況下では、他のプロパティ((と右の時間は何ですか)boundscenterorigin)を使用すべきですか?


以下のリンクが最良の答えです。stackoverflow.com/questions/5361369/...
Ohmy

フレームと画像の
境界

回答:


240

上記のマルコの答えは正しいですが、「どのような状況下で」の質問に拡張するだけです...

フレーム -これは、通常のiPhoneアプリケーションで最もよく使用するプロパティです。ほとんどのコントロールは「含む」コントロールに相対的に配置されるため、frame.originはコントロールを表示する必要がある場所に直接対応し、frame.sizeはコントロールを作成する大きさを決定します。

center-これは、動きやスケーリングが発生する可能性があるスプライトベースのゲームやアニメーションで注目するプロパティです。デフォルトでは、アニメーションと回転はUIViewの中心に基づいています。このようなオブジェクトをフレームプロパティで管理することはほとんど意味がありません。

bounds-このプロパティは配置プロパティではありませんが、フレームに対して「相対的に」UIViewの描画可能領域を定義します。デフォルトでは、このプロパティは通常(0、0、widthheight)です。このプロパティを変更すると、フレームの外側に描画したり、フレーム内の小さな領域に描画を制限したりできます。これについての良い議論は以下のリンクで見つけることができます。描画領域を調整する特別な必要がない限り、このプロパティが操作されることはまれです。唯一の例外は、ほとんどのプログラムが[[UIScreen mainScreen] bounds]起動時にを使用してアプリケーションの表示領域を決定し、それに応じて初期UIViewのフレームをセットアップすることです。

UIViewにフレーム四角形と境界四角形があるのはなぜですか?

うまくいけば、これは各プロパティが使用される可能性がある状況を明確にするのに役立ちます。


33
boundsビューに変換が適用されている場合にこれらが一般的に使用されることを追加する価値があると思います。これらの状況下では、frameプロパティは未定義です。他の回答で指摘されているように、centerおよびboundsを変更することは、ビューの位置とサイズをそれぞれ変更することと同じです。
Stuart

36

これらは関連する値であり、プロパティセッター/ゲッターメソッドによって一貫性が保たれます(フレームが純粋に合成された値であり、実際のインスタンス変数によってサポートされていないという事実を使用します)。

主な方程式は次のとおりです。

frame.origin = center - bounds.size / 2

(これは同じです)

center = frame.origin + bounds.size / 2

(そしてまたあります)

frame.size = bounds.size

それはコードではなく、3つのプロパティ間の不変式を表す方程式です。これらの方程式は、ビューの変換が恒等であると仮定しています。これはデフォルトです。そうでない場合、境界と中心は同じ意味を維持しますが、フレームは変更される可能性があります。非直角回転を行わない限り、フレームは常にスーパービューの座標に関して変換されたビューになります。

この内容はすべて、ここで役立つミニライブラリでさらに詳しく説明されています。

http://bynomial.com/blog/?p=24


18

プロパティcenterboundsおよびframe連動する:1は他人を更新する変更は、そうしかし、あなたが望むそれらを使用しています。たとえば、x / yパラメータを変更しframeてビューを再調整する代わりに、centerプロパティを更新するだけです。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.