frame:以父控件左上角為原點(diǎn)
bounds:以自己的左上角為原點(diǎn),bounds x,y永遠(yuǎn)為0(這是錯(cuò)誤的認(rèn)識(shí))
frame和bounds都是用來(lái)描述一塊區(qū)域
frame:描述可視范圍,也就是說(shuō)從左上角的0,0點(diǎn)開(kāi)始延伸,它延伸的區(qū)域就是我們的可視范圍
bounds:描述可視范圍在內(nèi)容的區(qū)域,所有的子控件都有內(nèi)容,它就類(lèi)似于空氣,是看不到的,正常情
況下,內(nèi)容是無(wú)限大的,所有的子控件其實(shí)都是放在內(nèi)容上的,在可視范圍內(nèi)的內(nèi)容我們才能
看見(jiàn),所以正常情況下,內(nèi)容的左上角(bounds)與可視范圍(frame)的左上角是重合的,當(dāng)修
改bounds的x與y都會(huì)導(dǎo)致子控件跟著移動(dòng).需要注意的是,可視范圍(frame)是永遠(yuǎn)不會(huì)變的,它是相對(duì)父控件的.
所有的子控件都是相對(duì)于內(nèi)容
bounds:修改內(nèi)容原點(diǎn)
相對(duì)性:可視范圍相對(duì)于父控件位置永遠(yuǎn)不變
可視范圍相對(duì)于內(nèi)容,位置改變
如下圖舉例:

bounds.png
默認(rèn)情況下,可視范圍(frame)的原點(diǎn)與內(nèi)容(bounds)的原點(diǎn)是重合的.所以加在內(nèi)容左上角的開(kāi)關(guān)能看到,因?yàn)橐苍诳梢暦秶鷥?nèi),當(dāng)此時(shí)修改內(nèi)容的原點(diǎn),也就是bounds的y值,如y += 10,由于可視范圍是不變的,這時(shí)內(nèi)容的原點(diǎn)就會(huì)變化,y += 10,那么內(nèi)容原點(diǎn)就會(huì)往上移10,此時(shí)內(nèi)容上的控件(本例中指開(kāi)關(guān))也會(huì)跟著
內(nèi)容原點(diǎn)一起上移.
總結(jié):contentOffset(偏移量)的值和bounds的origin值是一樣的,偏移量往可視范圍外偏移是正數(shù),往可視范圍里面偏移是負(fù)數(shù),可視范圍指的是控件的frame