iOS-CALayer中position與anchorPoint詳解

有稜角的圓發表於2017-03-21

iOS-CALayer中position與anchorPoint詳解

屬性介紹

CALayer通過四個屬性來確定大小和位置, 分別為:frameboundspositionanchorPoint

下面分別對這是個屬性進行介紹:

frame

@property CGRect frame;

此屬性和view中的frame屬性相同.

  • X,Y表示subLayer左上角相對於supLayer左上角的位置關係.(與layer的錨點沒有關係,始終是左上角的位置關係)

  • width, height表示subLayer的寬度和高度

bounds

@property CGRect bounds;

此屬性和view中的bounds屬性相同.(將frame屬性中的x,y設定為0, 即是bounds屬性)

  • X,Y為0

  • width, height表示subLayer的寬度和高度

anchorPoint

anchorPoint點(錨點)的值是用相對bounds的比例值來確定的. 例如(0,0), (1,1)分別表示左上角、右下角,依此類推.

錨點都是對於自身來講的. 確定自身的錨點,通常用於做相對的tranform變換.當然也可以用來確定位置.

例如下圖,為不同錨點下做旋轉變化的例子

position

在layer體系結構中, layer需要新增在supLayer中,才可以顯示出來(和view體系結構相似). 因此,每一個顯示出來的layer都有一個supLayer.

position是layer中的anchorPoint點在superLayer中的位置座標.

anchorPoint、position、frame之間的相對關係.

首先弄清楚這三個屬性表示什麼. 回顧一下上面講的.

  • frame中的X,Y表示sublayer左上角相對於supLayer的左上角的距離
  • position中的X,Y表示sublay錨點相對於supLayer的左上角的距離
  • anchorPoint中的X,Y表示錨點的x,y的相對距離比例值

當確定錨點,改變frame時, position的值為:

position.x = frame.origin.x + anchorPoint.x * bounds.size.width;  
position.y = frame.origin.y + anchorPoint.y * bounds.size.height;

確定錨點, 改變position時, frame的值為:

frame.origin.x = position.x - anchorPoint.x * bounds.size.width;  
frame.origin.y = position.y - anchorPoint.y * bounds.size.height;

改變錨點, frame的值變化為

frame.origin.x = - anchorPoint.x * bounds.size.width + position.x;  
frame.origin.y = - anchorPoint.y * bounds.size.height + position.y;

影響關係

  • 錨點改變, position不影響, frame變化
  • frame變化, 錨點不影響, position變化
  • position變化, 錨點不影響, frame變化

轉載:http://www.cnblogs.com/AbeDay/p/5026870.html

相關文章