视图的center属性和图层的position属性都指定了anchorPoint相对于父图层的位置。图层的anchorPoint通过position来控制它的frame的位置,你可以认为anchorPoint是用来移动图层的把柄。
默认来说,anchorPoint位于图层的中点,所以图层的将会以这个点为中心放置。anchorPoint属性并没有被UIView接口暴露出来,这也是视图的position属性被叫做“center”的原因。但是图层的anchorPoint可以被移动,比如你可以把它置于图层frame的左上角,于是图层的内容将会向右下角的position方向移动,而不是居中了。如下图1:

anchorPoint的效果如下图2:

当anchorPoint不在中心的时候,的效果如下图3:

frame
frame是一个派生属性,是根据layer的bounds,position(center),archorPoint,transform计算出来的。
当改变bounds,position(center),archorPoint,transform当中的任何一个值时,frame都会发生变化。具体步骤如下:
- 首先根据
bounds、position(center)、archorPoint计算出变换前的frame。 - 根据变换前的
frame及transform计算出变换后的frame。 - 当变换后的
frame是一个平行四边形或者不平行与边轴时,返回一个最小的包括变换后的frame的四个顶点的矩形,这个矩形就是真实的frame。
当改变frame时,archorPoint,transform不变,bounds和position(center)随之改变。具体步骤如下:
- 首先根据
frame及transform计算出变换前的frame。 - 根据变换前的
frame的size修改bounds属性。 - 根据变换前的
frame、archorPoint修改position(center)属性。
bounds
通过get和set方法,直接读取layer的bounds属性。
当改变frame时,bounds会改变。
当改变bounds时,frame随之改变,原理看frame段落。
center(position)
通过get和set方法,直接读取layer的position属性。
当改变frame时,position(center)会改变。
当改变position(center)时,frame随之改变,原理看frame章节。
archorPoint
layer的属性,用于记录坐标变换时坐标系的原点。取值范围(0,0)~(1,1)。(0,0)表示以view的左上角为坐标原点进行坐标变换。(1,1)表示右下角。
当改变frame时,archorPoint不变。
当改变archorPoint时,frame随之改变,原理看frame章节。
transform(view的transform)
view的transform属性是直接调用的layer的affineTransform属性的get和set方法。affineTransform实际上是一个计算属性,当layer调用affineTransform的set方法时,实际上是换算为CATransform3D类型的结构体,赋值给layer的transform属性。同理调用affineTransform的get方法时,也是通过layer的transform属性换算为 CGAffineTransform返回的。换句话说,view的transform属性等同于layer的affineTransform属性,是通过get和set方法取的layer的transform的值。
当改变frame时,transform不变。
当改变transform时,frame随之改变,原理看frame章节。