frame:以父控件左上角为原点
bounds:以自己的左上角为原点,bounds x,y永远为0(这是错误的认识)
frame和bounds都是用来描述一块区域
frame:描述可视范围,也就是说从左上角的0,0点开始延伸,它延伸的区域就是我们的可视范围
bounds:描述可视范围在内容的区域,所有的子控件都有内容,它就类似于空气,是看不到的,正常情
况下,内容是无限大的,所有的子控件其实都是放在内容上的,在可视范围内的内容我们才能
看见,所以正常情况下,内容的左上角(bounds)与可视范围(frame)的左上角是重合的,当修
改bounds的x与y都会导致子控件跟着移动.需要注意的是,可视范围(frame)是永远不会变的,它是相对父控件的.
所有的子控件都是相对于内容
bounds:修改内容原点
相对性:可视范围相对于父控件位置永远不变
可视范围相对于内容,位置改变
如下图举例:
默认情况下,可视范围(frame)的原点与内容(bounds)的原点是重合的.所以加在内容左上角的开关能看到,因为也在可视范围内,当此时修改内容的原点,也就是bounds的y值,如y += 10,由于可视范围是不变的,这时内容的原点就会变化,y += 10,那么内容原点就会往上移10,此时内容上的控件(本例中指开关)也会跟着
内容原点一起上移.
总结:contentOffset(偏移量)的值和bounds的origin值是一样的,偏移量往可视范围外偏移是正数,往可视范围里面偏移是负数,可视范围指的是控件的frame