frame和bounds
首先来说一下frame和bounds的个人理解:
frame:view.frame的意思是这个view在父视图本地参考坐标系(bounds)上的位置与大小
bounds:view.bounds是这个view自身的本地参考坐标系(位置与大小)供其子视图使用
这么说你肯定不太懂,但是看我带图洗脑
// 创建view1
let view1 = UIView()
view1.backgroundColor = UIColor.yellow
view1.frame = CGRect(x: 50, y: 50, width: 100, height: 100)
self.view.addSubview(view1)
请记住这个黄色视图的center(中点),当你去修改bounds会跟它相关
1.bounds的size属性
// 设置bounds
view1.bounds = CGRect(x: 0, y: 0, width: 50, height: 50)
只改变view1.bounds.size,这个时候view1的center不变,view1的大小随center缩放,修改后view1.frame也随之发生变化view1.frame = (75.0, 75.0, 50.0, 50.0)
2.bounds的origin属性
// 设置bounds
let view1 = UIView()
view1.backgroundColor = UIColor.yellow
view1.frame = CGRect(x: 50, y: 50, width: 100, height: 100)
view1.bounds = CGRect(x: -20, y: -20, width: 100, height: 100)
self.view.addSubview(view1)
// view1上添加子视图
let view2 = UIView()
view2.backgroundColor = UIColor.red.withAlphaComponent(0.5)
view2.frame = CGRect(x: 0, y: 0, width: 50, height: 50)
view1.addSubview(view2)
> 由此可见:
1.因为view1.bounds.size没变所以view1.frame没有改变,
2.view1.bounds.origin改变影响了view1子视图的位置,所以view1.bounds.origin是view2.frame.origin的参考
3.view1.bounds.origin的修改是根据view1左上角为原点参考
3.bounds的x,y,width和height四个属性同时修改
// 设置bounds
let view1 = UIView()
view1.backgroundColor = UIColor.yellow
view1.frame = CGRect(x: 50, y: 50, width: 100, height: 100)
view1.bounds = CGRect(x: -20, y: -20, width: 70, height: 70)
self.view.addSubview(view1)
// 子视图frame不变
let view2 = UIView()
view2.backgroundColor = UIColor.red.withAlphaComponent(0.5)
view2.frame = CGRect(x: 0, y: 0, width: 50, height: 50)
view1.addSubview(view2)
由此可见,同时修改bounds的4个属性,
1.先修改bounds.size属性,将view1的位置和大小设置好得出修改后的frame
2.然后根据修改后view1左上角原点来修改view1.bounds.origin,从而改变view1的子视图的位置