http://superman474.blog.163.com/blog/static/120661462011857434701/
觉得ios中的Core Animation还是很有用的,以前只是知道怎么用,但是没有系统的看过文档,所以决定把其文档好好的看一下,在此记录一下比较有用的东西,废话不多了,现在开始。
core Animation是一个集成了图形绘制,映射,动画为一体的类库,使用先进的合成提供了一系列的动画,同时保留了一个一个hierarchical layer,cocoa touch view的结构中就有layer。总之core animation使你能够很简单的创建很复杂的动画。
此动画接口允许你在一个单独的线程运行动画,而独立与你的应用程序住循环。一旦一个动画配置并启动,core animation承担全部的责任。
因为layer在core Animation中起着基础的作用,所以下面先介绍layer。描述layer中个部分的几何形状,它们如何关联,以及如何变换矩阵产生复杂的视觉效果。
1.layer的坐标系统
2,layer的几何形状
layer和layer-tree在很多方面相似于view和view层次。但是几何形状里面的一些属性和view不一样,下面详细介绍,所有的layer的几何属性包括layer的转换矩阵都能动画。
(所有的图片都是在mac ox下的,在ios下其实也一样,只不过起始点变为了左上角)
position属性是一个CGPoint表示相对于superlayer的位置。
bounds属性是一个CGRect,提供layer的size(bounds.size)和(bounds.origin)。
frame 属性有bounds,anchorPoint,position属性共同决定,当frame改变时,layer的position和bounds的 size会改变已适用与frame。当一个layer的frame被设置时,bounds的origin不受干扰,但layer的size被设置成 frame的size。
layer的position被设置成恰当的位置相对于anchor point。当我们请求一个frame的属性,会通过positon bounds,anchorPoint属性计算得到。
anchorPoint属性是一个CGPoint,表示positon相对于bounds的位置。属于单元坐标系统。当为(0,0)时,接近于origin。当在父layer上应用一个transform上,可以改变anchorPoint的方向。
下图显示anchorPoint的三个值。
缺省的anchorPoint为(0.5,0,5),相对去layer bounds的中心,如上图A。
上图中anchorPoint缺省的为(0.5,0..5),其是layer的中心。layer的position设置为(100,100),bound设置为(0,0,120,80),这些属性使能计算出frame属性值为(40,60,120,80)。
上图设置anchorPoint为(0,0),当frame被设置为(40,60,120,80)时,bounds没有改变,但是position发生改变。
2.layer几何形状的转换
我们可以通过矩阵去转换一个layer的几何形状。转换数据结构定义了一个同质三维变换,(4*4的矩阵)用来去旋转,scale,offset,skew(歪斜),并应用角度转换到layer。
CGFloat DegreesToRadians(CGFloat degrees) {return degrees * M_PI / 180;}; |
CGFloat RadiansToDegrees(CGFloat radians) {return radians * 180 / M_PI;}; |