web-dev-qa-db-ja.com

NSViewの境界とフレーム

境界とフレームの違いは何ですか?実際、なぜ「境界」が存在するのでしょうか? 「境界」のサイズはフレームのサイズに等しく、境界の原点は常に0,0である必要があります。

43
David

View and Window Architecture iOS向けプログラミングガイドから:

ビューオブジェクトは、フレーム、境界、および中心のプロパティを使用して、サイズと位置を追跡します。

frameプロパティには、スーパービューの座標系でのビューのサイズと位置を指定するフレーム長方形が含まれています。

boundsプロパティには、ビューのローカル座標系でのビュー(およびそのコンテンツのOrigin)のサイズを指定する境界矩形が含まれます。

Centerプロパティには、スーパービューの座標系でのビューの既知の中心点が含まれます。

その説明を適切に視覚化したものを次に示します。

enter image description here

91
Dan

境界のOriginは常に0,0とは限りません。スクロール中にUIScrollViewのboundsプロパティがどのように変化するかを見ると、フレームと境界の違いを理解するのは簡単です。

たとえば、フレーム(0、0、320、460)、境界(0、0、320、460)、およびContentSize(640、460)を持つUIScrollViewがあります。そのフレームは常に(0、0、320、460)になりますが、境界のX座標はスクロールの距離に応じて変化します。

UIScrollViewで何かを変更する場合(たとえば、ページを動的に作成および削除する場合)、スクロールの距離を知りたい場合に役立ちます。

9
tagirkaZ

最初の答えのAppleドキュメントは、横向きに回転した後のフレームと境界に何が起こるかをカバーしていません。より完全にするには、ウィンドウのフレームとルートビューは回転後も変化しませんが、境界は変化します。 この記事を参照 もう少し詳細を知り、縦向き以外の参照としてフレームを使用する場合は注意してください.

記事から:

View Controllerにトップレベルの非ウィンドウビューがある(つまり、最下部のView Controllerである)場合、

self.frame

常に縦向きになります。なに?はい、常にポートレートで–ビューの変化は何が変わるかです。あなたの

self.bounds

常に正確です(最後の点に注意してください)が、

self.frame

各ビューのフレームはスーパービューの座標に基づいて報告され、ビューに適用される変換を考慮に入れるため、ユーザーが実際に見ているアスペクト比を提供する場合としない場合があります。

8
Jim

ビューフレームは、完全に収まる長方形のサイズです。境界とフレームが同じであるかのように常に見えますが、そうではありません。約45度回転した正方形を考えてみましょう!

ここで、この回転された正方形のフレームは、完全に塗りつぶされる長方形になるため、このオブジェクトの境界とは異なります。

P.Sは、主に回転したオブジェクトのフレームと境界で異なります。

1
Maddiee

フレームはスーパービューの座標系の座標値です

描画システムが境界を使用してビューのコンテンツを描画します。描画が完了すると、システムは変換操作を使用してコンテンツをビューのフレームに割り当てます。

0
0oneo