UIView的frame和bounds的区别
UIView作为iOS里面常用的控件,它有两个属性Frame和bounds,刚开始的这两个属性傻傻分不清楚,看了一些资料,渐渐有点知道他们都是神马意思了。。话不多少,我们先看图
看懂这张图基本上这两个属性也就理解的差不多了
frame
该view在父view坐标系统中的位置和大小,它的参考坐标系是父view的坐标系
bounds
该view在本地坐标系统中的位置和大小,它的参考坐标系是自身的坐标系,原点始终为(0,0)
我们还是回到图中吧,
ViewA的大小是宽550 高400
ViewA的frame为(0,0,550,400)
ViewA的bounds为(0,0,550,400)这里面原点(0,0)是相对于自身坐标系来说的,和上面代表的意义不一样
</br></br>
ViewB是ViewA的子View
ViewB的大小是宽200 高250
ViewB的frame为(200,100,200,250) 意思是在父ViewA坐标系的(200,100)位置
ViewB的bounds为(0,0,,200,250)可以看到原点还是(0,0),因为相对于自身的坐标系原点始终为(0,0)
关于bounds的理解可能还有点迷惑,一般情况下,他的原点坐标始终为(0,0),不过我们也可以设置它的值来改变他的原点坐标。还是那上面那张图来说
假如我们设置了ViewA的bounds为(-50,-50,550,400)
则ViewA的原来的原点(0,0)---> (-50,-50),此时如果ViewB的frame还是(200,100,200,250)的话,那么它的位置就要发生一点点的变化。ViewB参考的坐标系为父ViewA的坐标系,即ViewA bounds参考的自身坐标系,ViewA自身的坐标系已经发生变化,所以呈现到界面显示的时候ViewB的位置就会偏移(50,50)