在ios中有的控件有frame和bound两个属性,这两个属性的参数非常相似
aview.frame = CGRectMake(CGFloat x, CGFloat y, CGFloat
width, CGFloat height)
aview.bounds = CGRectMake(CGFloat x, CGFloat y,
CGFloat width, CGFloat height)
两者的共同点是后面两个参数都是设置控件的大小,区别是前两个参数,对于frame来说,CGFloat x, CGFloat y,两个参数是aview相对于父视图的位置,二bounds是aview上面的子视图在aview上面的起始位置.我们用代码看下效果
添加两个view分别是aview 和bview 其中aview添加到背景上面,bview作为子视图添加到aview上面.
UIView *aview = [[UIView alloc]init];
aview.backgroundColor = [UIColor redColor];
aview.frame = CGRectMake(100, 100, 200, 200);
[self.view addSubview:aview];
下面我们添加bview
UIView *bview = [[UIView alloc]initWithFrame:CGRectMake(0, 0, 100, 100)];
bview.backgroundColor = [UIColor grayColor];
[aview addSubview:bview];
效果如下图
前面我们说了frame的前面两个参数 是相对于父视图的位置,如果我们没有设置父视图aview的bound 那我们默认的参考系原点就是父视图的左上角的起始位置
下面我们修改下父视图aview的bounds看看会有什么变化
aview.bounds = CGRectMake(50, 50, 200, 200);
修改之后效果如下
可以看到这个bview的位置发生了变化,相对于原来的原点分辨向上向左移动了50的距离.
如果改变下前面两个值
aview.bounds = CGRectMake(-50, -50, 200, 200);
效果如下