frame 是 一个控件在其父控件中的 位置 和 尺寸spa
bounds 是一个控件以自身的坐标系为参考 获得的 位置 和 尺寸 。既然以自身为坐标系,那么 X 和 Y 在非特殊状况下就是 0 ,0 。 宽高 仍然仍是控件自身的 宽高。code
特殊状况是什么?it
答:主动设置bounds 改变它的默认位置。class
代码以下:object
- (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 上。im
注意:view2的frame 设置的是 (0,0,100,100),按理说应该和view1的左上角重合,可是代码运行起来的结果以下: (并无重合,这是由于咱们设置了view1 的自身坐标系bounds)img
1. 它能够修改本身坐标系的原点位置,进而影想到“子view”的显示位置。view
2. bounds,它能够改变的frame。若是bounds比frame大。那么frame也会跟着变大。这个做用更像边界和大小的意思,frame至关于边界,bounds至关于大小。vi