区别:
frame 是 一个控件在其父控件中的 位置 和 尺寸
bounds 是一个控件以自身的坐标系为参考 得到的 位置 和 尺寸 。既然以自身为坐标系,那么 X 和 Y 在非特殊情况下就是 0 ,0 。 宽高 仍然还是控件自身的 宽高。
特殊情况是什么?
答:主动设置bounds 改变它的默认位置。
代码如下:
- (void)viewDidLoad {
[super viewDidLoad];
UIView *view1 = [[UIView alloc] initWithFrame:CGRectMake(20, 20, 280, 250)];
//设置 view1自身的 bounds
[view1 setBounds:CGRectMake(-20, -20, 280, 250)];
view1.backgroundColor = [UIColor redColor];
[self.view addSubview:view1];//添加到self.view
UIView *view2 = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 100, 100)];
view2.backgroundColor = [UIColor yellowColor];
//添加到view1上,[此时view1坐标系左上角起点为(-20,-20)]
[view1 addSubview:view2];
}
view1 添加在 self.view 上, view2 添加在 view1 上。
注意:view2的frame 设置的是 (0,0,100,100),按理说应该和view1的左上角重合,但是代码运行起来的结果如下: (并没有重合,这是因为我们设置了view1 的自身坐标系bounds)
bounds的有以下两个特点:
1. 它可以修改自己坐标系的原点位置,进而影想到“子view”的显示位置。
2. bounds,它可以改变的frame。如果bounds比frame大。那么frame也会跟着变大。这个作用更像边界和大小的意思,frame相当于边界,bounds相当于大小。