1. ホーム
  2. cocoa

[解決済み] Cocoa:フレームとバウンドはどう違うの?

2022-02-19 20:43:59

質問内容

UIView とそのサブクラスはすべて、プロパティ framebounds . 何が違うの?

どのように解決するのですか?

その 境界 UIView 長方形 は、自身の座標系(0,0)を基準とした位置(x,y)と大きさ(width,height)で表現されます。

フレーム UIView 長方形 は、それが含まれるスーパービューからの相対的な位置 (x,y) とサイズ (width,height) として表現されます。

そこで、100x100 (幅x高さ) のサイズで、そのスーパービューの 25,25 (x,y) に配置されるビューを想像してください。 次のコードは、このビューの境界とフレームを出力します。

// This method is in the view controller of the superview
- (void)viewDidLoad {
    [super viewDidLoad];

    NSLog(@"bounds.origin.x: %f", label.bounds.origin.x);
    NSLog(@"bounds.origin.y: %f", label.bounds.origin.y);
    NSLog(@"bounds.size.width: %f", label.bounds.size.width);
    NSLog(@"bounds.size.height: %f", label.bounds.size.height);

    NSLog(@"frame.origin.x: %f", label.frame.origin.x);
    NSLog(@"frame.origin.y: %f", label.frame.origin.y);
    NSLog(@"frame.size.width: %f", label.frame.size.width);
    NSLog(@"frame.size.height: %f", label.frame.size.height);
}

そして、このコードの出力は

bounds.origin.x: 0
bounds.origin.y: 0
bounds.size.width: 100
bounds.size.height: 100

frame.origin.x: 25
frame.origin.y: 25
frame.size.width: 100
frame.size.height: 100

つまり、どちらの場合も、バウンドとフレームのどちらを見ていても、ビューの幅と高さは同じであることがわかります。 異なるのは、ビューの x,y 位置です。 境界の場合、xとyの座標は0,0になり、これらの座標はビュー自体に対する相対的なものです。 しかし、フレームのx,y座標は、親ビュー内のビューの位置(先ほど25,25と言いました)に対する相対的なものです。

また 大演出 は、UIViewsをカバーしています。 フレームとバウンドの違いを説明するだけでなく、視覚的な例も示しているので、スライド1〜20を参照してください。