何を使用するには、UIViewのフレームの、境界、中央、起源、?
質問
UIView
は、プロパティのframe
、bounds
、center
、およびorigin
を持っており、それらはすべて相互に関係しているようです。 frame
の位置とサイズを設定する際の時間のほとんどは、私はUIView
に対処します。私はframe
は、システムとbounds
がローカルビュー(したがって、そのxとyは常に0ですが、ではない)の座標を用いているが、何を使用するとき、それはまだ私には混乱のグローバル座標を用いていることを理解します。
は、どのような状況(どのような右の時間です)他のプロパティ(bounds
、center
、origin
)の下で使用する必要がありますか?
解決
上記のマルコの答えは正しいですが、ちょうど
...「何文脈の下で」の問いに展開しますののフレーム - これは通常のiPhoneアプリケーションのためのあなたが最も頻繁に使用するプロパティです。 frame.originが直接コントロールが表示する必要がある場合に対応させていただきますので、ほとんどのコントロールは、「含む」対照と比較してレイアウトされ、frame.sizeは制御をするためにどのように大きな決定します。
のセンターの - これはあなたがそうスプライトベースのゲームや移動や拡大縮小が発生する可能性があり、アニメーションのために焦点を当てるプロパティです。デフォルトのアニメーションや回転によってのUIViewの中心部に基づいて行われます。それはほとんど試してみて、フレームのプロパティによって、このようなオブジェクトを管理することは理にかなっていません。
の境界の - このプロパティは、位置決め性ではなく、フレームに「相対」のUIViewの描画可能領域を画定します。デフォルトでは、このプロパティは(0、0、の幅の、の高さの)通常です。このプロパティを変更すると、外枠の描画やフレーム内の小さな領域に描画を制限できるようになります。この良い議論は下のリンクで見つけることができます。描画領域を調整する具体的な必要性がある場合を除き、このプロパティを操作することはまれです。唯一の例外は、ほとんどのプログラムは、アプリケーションとセットアップに応じて初期のUIViewのフレームの表示領域を決定するために、起動時に[[UIScreen mainScreen] bounds]
を使用するということです。
うまくいけば、これは、各プロパティが慣れるかもしれない状況を明確にするのに役立ちます。
他のヒント
これらは、関連する値であり、プロパティセッター/ゲッターメソッドにより一貫性が保た(及びフレームが実際のインスタンス変数に支えていない純粋に合成値であることを利用して)。
主方程式は以下のとおりです。
frame.origin = center - bounds.size / 2
(同じです)
center = frame.origin + bounds.size / 2
(ともあります)
frame.size = bounds.size
それはちょうど3つの特性の間の不変を表現するために方程式のコードはありません。これらの式はまた、あなたのビューの変換は、それがデフォルトであるアイデンティティ、であると仮定します。そうでない場合は、境界およびセンターは、同じ意味を保つが、フレームを変更することができます。あなたは非直角回転をやっている場合を除き、フレームは常にスーパービューの座標の点では変換ビューになります。
このようなものは、すべてここに便利なミニライブラリーでより詳細に説明されます:
プロパティはcenter
とbounds
が連動され、frame
:1を変更すると、他の人を更新するので、しかし、あなたが望むそれらを使用します。例えば、代わりのビューを更新したりするframe
のX / Yのparamsを変更するだけでcenter
プロパティを更新します。