UIView
およびそのサブクラスにはすべて、プロパティframe
とがありますbounds
。違いは何でしょうか?
ベストアンサー1
境界はUIビューそれは矩形独自の座標系 (0,0) を基準とした位置 (x,y) とサイズ (幅,高さ) として表されます。
フレームのUIビューそれは矩形含まれているスーパービューに対する相対的な位置 (x,y) とサイズ (幅,高さ) として表されます。
そこで、スーパービューの 25,25 (x,y) に配置された、サイズが 100x100 (幅 x 高さ) のビューを想像してください。次のコードは、このビューの境界とフレームを出力します。
// 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 を参照してください。