概念
View的幾何性質是通過它的frame、bounds和center屬性定義的。frame定義了視圖在父視圖坐標系統中的源點位置和尺寸大小,通常用于在布局中調整視圖的位置和大小。bounds定義了可視視圖的內部尺寸大小。center通常用來在不改變視圖的大小的前提下調整視圖的位置。
關系
1.frame和bounds的size部分兩者是緊密聯系在一起的,所以改變改變其中任一一個,都會更新兩者的size。值得注意的是frame的size并不總是等于bounds的size的。
2.實際上frame時一個派生屬性。當使用frame來布局時,需要特別注意的是:如果視圖的transform不等于CGAffineTransformIdentity時,frame可能并不能正確反映出視圖的位置,此時請用bounds和center代替。
猜想
1.在UIKit框架下,View不過是對Layer進行了封裝,并接管了處理事件的能力。顯示在屏幕上的依舊是Layer。
2.View的本身視圖和本身圖層共用一套坐標系(其實只有一個Layer坐標系,也不是共用了啦,亦可理解成共用),
3.視圖中的frame,bounds,center只不過是圖層中的frame,bounds,position
4.由于視圖沒有暴露出圖層的anchorPoint,因而在不改變anchorPoint默認位置的前提下,center是frame的中點的才成立。
5.這也解釋了為什么對View某些的操作和直接操作Layer的效果是一樣的。
坐標系簡析
子視圖(圖層)所在的坐標系,是由父視圖(圖層)的bounds所決定的。
center簡析
1.視圖的center與圖層的position是同一坐標系下的同一個點。當操作視圖的center時,實際上是改變位于視圖下方CALayer的position,不能獨立于圖層之外改變視圖的center。
2.anchorPoint和position的關系是不同坐標系下的同一個點。(關于anchorPoint和position的關系,我將于Layer篇再進行解讀吧)
3.圖層的anchorPoint默認位于圖層的中點,此時圖層的position位于圖層的中點,因而視圖的center是frame的中心點。
4.但是當anchorPoint不位于圖層的中點時,此時圖層的position不位于圖層的中點,因而視圖的center不是frame的中心點。
frame簡析
1.視圖的frame與圖層的frame是同一坐標系統下的同一區域。當操作視圖的frame時,實際上是改變位于視圖下方CALayer的frame,不能獨立于圖層之外改變視圖的frame
2.關于圖層的frame,我將于Layer篇再進行解讀吧
bounds簡析
1.視圖的bounds與圖層的bounds是同一坐標系統下的同一區域。當操作視圖的bounds時,實際上是改變位于視圖下方CALayer的bounds,不能獨立于圖層之外改變視圖的bounds
2.通過改變bounds.origin,可以改變其所決定的坐標系,所有依賴于此坐標系的子視圖,其位置都會產生相應的移動,以適應舊坐標系到新坐標系過渡的需要。這也就是scroll實現的原理。
3.更深更具體,關于圖層的bounds,我將于Layer篇再進行解讀吧
未完待續(個人見解)