はじめ
この二つは位置やサイズに用いるもので、簡単にまとめると、
- frame はスーパービュー(親要素)から見た座標
- bounds はローカルビュー(自身)から見た座標
となります。以下のアップル公式の資料に掲載されているイメージを見ると分かりやすいです。
引用:iOS Viewプログラミングガイド
確かめる
二つのビューを生成して確かめてみます。例
//viewAの生成
UIView *viewA = [[UIView alloc] init];
viewA.frame = CGRectMake(20, 20, 200, 300);
viewA.backgroundColor = [UIColor redColor]; //背景を赤
[self.view addSubview:viewA];
//viewAのログ
NSLog(@"viewA bounds : origin.x->%f origin.y->%f size.width->%f size.height->%f", viewA.bounds.origin.x,
viewA.bounds.origin.y, viewA.bounds.size.width, viewA.bounds.size.height);
NSLog(@"viewA frame : origin.x->%f origin.y->%f size.width->%f size.height->%f", viewA.frame.origin.x, viewA.frame.origin.y, viewA.frame.size.width, viewA.frame.size.height);
//viewBの生成
UIView *viewB = [[UIView alloc] init];
viewB.frame = CGRectMake(20, 20, 100, 100);
viewB.backgroundColor = [UIColor blueColor]; //背景を青
[viewA addSubview:viewB];
// viewBのログ
NSLog(@"viewB bounds : origin.x->%f origin.y->%f size.width->%f size.height->%f", viewB.bounds.origin.x, viewB.bounds.origin.y, viewB.bounds.size.width, viewB.bounds.size.height);
NSLog(@"viewB frame : origin.x->%f origin.y->%f size.width->%f size.height->%f", viewB.frame.origin.x, viewB.frame.origin.y, viewB.frame.size.width, viewB.frame.size.height);
ログ
viewA bounds : origin.x->0.000000 origin.y->0.000000 size.width->200.000000 size.height->300.000000
viewA frame : origin.x->20.000000 origin.y->20.000000 size.width->200.000000 size.height->300.000000
viewB bounds : origin.x->0.000000 origin.y->0.000000 size.width->100.000000 size.height->100.000000
viewB frame : origin.x->20.000000 origin.y->20.000000 size.width->100.000000 size.height->100.000000
originは左上隅、sizeは大きさを取得します。
実行画像
参考記事
[Objective-C][Debug][Xcode][iPhone]いまさら聞けないUIView(1)「frameとboundsの違い - BAD_ACCESS[XCODE] UIViewのframeとboundsとcenterの意味を整理してみた YoheiM.NET
UIView の表示位置を変更する : Objective-C プログラミング - EZ-NET
0 件のコメント:
コメントを投稿