frame:以父控件左上角為原點
bounds:以自己的左上角為原點,bounds x,y永遠為0(這是錯誤的認識)
frame和bounds都是用來描述一塊區(qū)域
frame:描述可視范圍,也就是說從左上角的0,0點開始延伸,它延伸的區(qū)域就是我們的可視范圍
bounds:描述可視范圍在內(nèi)容的區(qū)域,所有的子控件都有內(nèi)容,它就類似于空氣,是看不到的,正常情
況下,內(nèi)容是無限大的,所有的子控件其實都是放在內(nèi)容上的,在可視范圍內(nèi)的內(nèi)容我們才能
看見,所以正常情況下,內(nèi)容的左上角(bounds)與可視范圍(frame)的左上角是重合的,當修
改bounds的x與y都會導致子控件跟著移動.需要注意的是,可視范圍(frame)是永遠不會變的,它是相對父控件的.
所有的子控件都是相對于內(nèi)容
bounds:修改內(nèi)容原點
相對性:可視范圍相對于父控件位置永遠不變
可視范圍相對于內(nèi)容,位置改變
如下圖舉例:
bounds.png
默認情況下,可視范圍(frame)的原點與內(nèi)容(bounds)的原點是重合的.所以加在內(nèi)容左上角的開關(guān)能看到,因為也在可視范圍內(nèi),當此時修改內(nèi)容的原點,也就是bounds的y值,如y += 10,由于可視范圍是不變的,這時內(nèi)容的原點就會變化,y += 10,那么內(nèi)容原點就會往上移10,此時內(nèi)容上的控件(本例中指開關(guān))也會跟著
內(nèi)容原點一起上移.
總結(jié):contentOffset(偏移量)的值和bounds的origin值是一樣的,偏移量往可視范圍外偏移是正數(shù),往可視范圍里面偏移是負數(shù),可視范圍指的是控件的frame