iOS核心動畫高級技巧(筆記)——(二)圖層幾何學

圖層幾何學

布局

  • UIView有三個比較重要的布局屬性:frameboundscenterCALayer對應地叫做frameboundsposition。為了能清楚區分,圖層用了“position”,視圖用了“center”,但是他們都代表同樣的值。
    frame代表了圖層的外部坐標(也就是在父圖層上占據的空間),bounds是內部坐標({0, 0}通常是圖層的左上角),centerposition都代表了相對于父圖層anchorPoint所在的位置。

錨點

  • 默認來說,anchorPoint位于圖層的中點,所以圖層的將會以這個點為中心放置。anchorPoint屬性并沒有被UIView接口暴露出來,這也是視圖的position屬性被叫做“center”的原因。但是圖層的anchorPoint可以被移動,比如你可以把它置于圖層frame的左上角,于是圖層的內容將會向右下角的position方向移動,而不是居中了。
anchorPoint

注意:
當改變了anchorPointposition屬性保持固定的值并沒有發生改變,但是frame卻移動了。

anchorPoint用單位坐標來描述,也就是圖層的相對坐標,圖層左上角是{0, 0},右下角是{1, 1},因此默認坐標是{0.5, 0.5}。anchorPoint可以通過指定x和y值小于0或者大于1,使它放置在圖層范圍之外。

坐標系

  • CALayer給不同坐標系之間的圖層轉換提供了一些工具類方法
    - (CGPoint)convertPoint:(CGPoint)point fromLayer:(CALayer *)layer;
    - (CGPoint)convertPoint:(CGPoint)point toLayer:(CALayer *)layer;
    - (CGRect)convertRect:(CGRect)rect fromLayer:(CALayer *)layer;
    - (CGRect)convertRect:(CGRect)rect toLayer:(CALayer *)layer;
    這些方法可以把定義在一個圖層坐標系下的點或者矩形轉換成另一個圖層坐標系下的點或者矩形.
  • zPosition

zPosition屬性在大多數情況下其實并不常用。在后面,我們將會涉及CATransform3D,你會知道如何在三維空間移動和旋轉圖層,除了做變換之外,zPosition最實用的功能就是改變圖層的顯示順序了。改變視圖順序可以用bringSubViewToFront
通常,圖層是根據它們子圖層的sublayers出現的順序來類繪制的,這就是所謂的畫家的算法--就像一個畫家在墻上作畫--后被繪制上的圖層將會遮蓋住之前的圖層,但是通過增加圖層的zPosition,就可以把圖層向用戶視角方向前置。其實并不需要增加太多,視圖都非常地薄,所以給zPosition提高一個像素就可以讓視圖前置,當然0.1或者0.0001也能夠做到,但是最好不要這樣,因為浮點類型四舍五入的計算可能會造成一些不便的麻煩。

Hit Testing

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容