Core Animation:布局
-
视图的
frame、bounds和center(对应于图层是position)属性仅仅是存取方法,当操纵视图的frame,实际上是在改变位于视图下方CALayer的frame,不能够独立于图层之外改变视图的frame -
对于视图或者图层来说,
frame并不是一个非常清晰的属性,它其实是一个虚拟属性,是根据bounds,position和transform计算而来,所以当其中任何一个值发生改变,frame都会变化。相反,改变frame的值同样会影响到他们当中的值 -
frame、bounds和center的区别如下图所示:
(图一)frame、bounds和center对比
(图二)旋转后frame、bounds和center对比
-
图层的
anchorPoint属性被暴露出来,anchorPoint和contentsRect属性类似,用单位坐标来描述。改变anchorPoint,会改变图层的frame。如下图三所示
(图三)改变anchorPoint后,frame值对比
最重要的是,图层的旋转是以anchorPoint为旋转中心的。
5.图层具有一个叫做geometryFlipped,类型为BOOL的属性。设置这个属性为YES后,它的子图层的坐标系会垂直翻转,即以左下角作为原点。若再将一个子图层的geometryFlipped设置为YES,则这个图层的子图层会再次翻转,相当于没有经过翻转了。
6.对于图层position与anchorPoint的理解参考这个链接(position是layer中的anchorPoint点在superLayer中的位置坐标):http://blog.csdn.net/yongyinmg/article/details/37927793。 anchorPoint的改变,会影响图层旋转的效果。
7.正常情况下,图层是根据它们子图层的sublayers出现的顺序来进行绘制的。但通过改变zPosition可以改变图层的显示顺序。(zPosition不会改变事件传递的顺序)
8.图层的hitTest:方法可以检测图层是否被点击。如果被点击的点包含在当前图层的子图层,就会返回最后一个包含该点的图层。如果子图层都没有包含,但当前图层包含该点,就会返回当前图层。否则,就返回nil。