IOS----Core Animation介绍1

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的坐标系统
  layer 的坐标系统在ios中是从左上角开始,向两个方向扩展。跟view的坐标系统一样。每一个layer对象定义和维护自己的坐标系统。因为每一个layer 定义了自己的坐标系统,所以CALayer对象提供了一些方法用于从一个坐标系统的点,矩形,size转换到另一个坐标系统。
  一些layer的属性用单位坐标空间衡量其值。单位坐标空间的值相对于layer的bounds。一个单位空间的值的范围一般是0.0-1.0。

2,layer的几何形状
layer和layer-tree在很多方面相似于view和view层次。但是几何形状里面的一些属性和view不一样,下面详细介绍,所有的layer的几何属性包括layer的转换矩阵都能动画。
CALayer geometry properties
(所有的图片都是在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的方向。

   当设置一个layer的frame时,position会根据anchorPoint设置其值。当设置一个position的值时,bounds的值会根据anchorPoint设置。
下图显示anchorPoint的三个值。
Three anchorPoint values

缺省的anchorPoint为(0.5,0,5),相对去layer bounds的中心,如上图A。

Layer Origin of (0.5,0.5)

上图中anchorPoint缺省的为(0.5,0..5),其是layer的中心。layer的position设置为(100,100),bound设置为(0,0,120,80),这些属性使能计算出frame属性值为(40,60,120,80)。

Layer Origin of (0.0,0.0)
上图设置anchorPoint为(0,0),当frame被设置为(40,60,120,80)时,bounds没有改变,但是position发生改变。

  其他layer和view不相同的方面就是layer可以指定一个radius,此用来去圆滑layer的角。cornerRadius用来圆角一个layer。

2.layer几何形状的转换
我们可以通过矩阵去转换一个layer的几何形状。转换数据结构定义了一个同质三维变换,(4*4的矩阵)用来去旋转,scale,offset,skew(歪斜),并应用角度转换到layer。
   layer的两个属性transform和sublayerTransform用于去指定转换矩阵。transfrom属性去指定矩阵应用到layer 中,sublayer相对与layer的anchorpoint。上面两个图分别给出了anchorPoint不一样的情况下转换矩阵的影响。 sublayerTransform属性指定的矩阵只应用的layer的sublayer上,而不是自己。

   注意角度的旋转是弧度可不是角度,下面两个函数提供互转
CGFloat DegreesToRadians(CGFloat degrees) {return degrees * M_PI / 180;}; 
CGFloat RadiansToDegrees(CGFloat radians) {return radians * 180 / M_PI;}; 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值