1、布局
- 1、UIView有三個(gè)比較重要的布局屬性:frame、bounds、center。CALayer對(duì)應(yīng)叫做frame、bounds、position。為了能清楚區(qū)分,圖層用來"position",視圖用了“center”,但是他們都代表同樣的值。
- 2、frame代表了"圖層"的外部坐標(biāo)(也就是在“父圖層上占據(jù)的空間”)
- 3、bounds是內(nèi)部坐標(biāo),{0,0}通常是圖層的左上角
- 4、center和position都代表了相對(duì)于父圖層anchorPoint所在的位置

QQ20161221-1@2x.png
5、視圖的frame、bounds、center屬性僅僅是存取方法,當(dāng)操縱視圖的frame時(shí),實(shí)際上是在改變位于視圖下方CALayer的frame
6、對(duì)于“視圖”或者“圖層”來說,frame并不是一個(gè)非常清晰的屬性,它其實(shí)是一個(gè)虛擬屬性,是根據(jù)bounds,position和transform計(jì)算而來,所以當(dāng)其中任何一個(gè)值發(fā)生改變,frame都會(huì)變化,相反,改變frame的值同樣會(huì)影響到他們當(dāng)中的值
7、當(dāng)對(duì)圖層做變換的時(shí)候,比如旋轉(zhuǎn)或者縮放,frame實(shí)際上代表了“覆蓋在圖層旋轉(zhuǎn)”之后的整個(gè)軸對(duì)齊的矩形區(qū)域,也就是說frame的寬高可能和bounds的寬高不在一致了

QQ20161221-2@2x.png
2、錨點(diǎn)
- 1、上面提到過,視圖的center屬性和圖層的position屬性都指定了anchorPoint相對(duì)于父圖層的位置。圖層的anchorPoint通過position來控制它的frame的位置,你可以認(rèn)為anchorPoint是用來移動(dòng)圖層的把柄。
- 2、默認(rèn)來說,anchorPoint位于圖層的中點(diǎn),所以圖層將會(huì)以這個(gè)點(diǎn)為中心放置。anchorPoint屬性并沒有被UIView接口暴露出來,這也是視圖的position屬性被叫做“center”的原因。
- 3、但是圖層的anchorPoint可以被移動(dòng),比如你可以把它置于圖層frame的左上角,于是圖層的內(nèi)容將會(huì)向右下角的position方向移動(dòng),而不是居中了


4、所以改變anchorPoint時(shí),雖然“位置”改變了,但是“center”沒有改變
5、和第二章提到的contentRect 和 contentsCenter屬性類似,anchorPoint用單位坐標(biāo)來描述,也就是圖層的相對(duì)坐標(biāo),圖層左上角是{0,0},右下角是{1,1},因此默認(rèn)坐標(biāo)是{0.5,0.5}。anchorPoint可以通過制定x和y值小于0或者大于1,使它放置在圖層范圍之外