195

UIView、、、およびのプロパティがframeありbounds、それらはすべて相互に関連しているようです。ほとんどの場合、私はの位置とサイズを設定するときに対処します。これはグローバル座標系を使用しており、ローカルビューの座標を使用していることを理解しています(したがって、xとyは0ですが、常にではありません)が、いつ何を使用するかはまだわかりません。centeroriginframeUIViewframebounds

どのような状況(そして適切な時期)で他のプロパティ(、、boundscenterorigin使用する必要がありますか?

4

3 に答える 3

240

上記のマルコの答えは正しいですが、「どのようなコンテキストで」という質問を拡張するだけです...

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

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

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

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

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

于 2009-07-08T10:02:28.143 に答える
36

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

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

frame.origin = center - bounds.size / 2

(と同じです)

center = frame.origin + bounds.size / 2

(そしてあります)

frame.size = bounds.size

これはコードではなく、3つのプロパティ間の不変条件を表す方程式にすぎません。これらの方程式は、ビューの変換がデフォルトであるIDであることも前提としています。そうでない場合、境界と中心は同じ意味を保ちますが、フレームは変わる可能性があります。非直角回転を行っている場合を除き、フレームは常にスーパービューの座標に関して変換されたビューになります。

このようなものはすべて、ここにある便利なミニライブラリでより詳細に説明されています。

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

于 2010-04-15T00:35:29.980 に答える
19

プロパティcenterboundsおよびframeは連動しています。1つを変更すると、他のプロパティも更新されるため、必要に応じて使用してください。たとえば、のx / yパラメータを変更しframeてビューを最新のものにする代わりに、centerプロパティを更新するだけです。

于 2009-07-01T20:21:37.963 に答える