iOS开发 --frame和bounds区别详解

来源:互联网 发布:bp神经网络算法 matlab 编辑:程序博客网 时间:2024/06/13 23:31

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属性

// 设置boundsview1.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的子视图的位置

原创粉丝点击