Core Animation学习笔记

着力动画 CoreAnimation

 

 第一章 焦点动画概念

骨干动画,开发人员能够为她们的接纳成立动态用户界面,而无需使用低级其余图形
API,如 OpenGL 来取得便捷的卡通性能。

 

序言,核心动画的裨益

1.简便易用的高质量混合编程模型。

2.近乎视图一样,你可以经过利用图层来创设复杂的接口。

   通过是CALayer来使用更扑朔迷离的一部分动画片。

   

3.轻量级的数据结构,它可以而且显示并让广大个图层暴发动画效果。

     控制几个CALayer来突显动画效果

     

 
4.一套不难的卡通片接口,可以让你的动画片运行在单独的线程里面,并得以

单身于主线程之外。

5.一旦动画配置达成并启动,大旨动画完全控制并独自完结相应的动画帧。

6.增高利用品质。应用程序只当暴发改变的时候才重绘内容。再小的应用程序也必要改变和提供布局服务层。焦点动画还免去了在动画的帧速率

上运行的应用程序代码。

7.灵活的布局管理模型。包罗允许图层相对同级图层的关联来安装相应属性的岗位和分寸。

   可以应用CALayer来更灵敏的展开布局。

 

 1.1 Core animation类

1.提供浮现内容的图层类。CALayer

2.动画和计时类。Animation and 提姆ing Classes

3.布局和约束类。

4.事务类,在原子更新的时候组成图层类。

骨干动画的基本功类富含在 Quartz 宗旨框架(Quartz Core
framework)里面,就算它的任何图层类在其他框架之中定义。下图展现了宗旨动画的类层次结构。 

图片 1

 

1.1.1 图层类

    层类(Layer Classes)

   Layer Classes是core animation的底蕴。Layer
Classes提供了一个华而不实的定义,这些概念对于那多少个运用NSview和UIview的开发者来说是很熟知的。基础层是由CAlayer类提供的,CAlayer是所有Core
Animation层的父类。 

   
同一个视图类的实例一样,一个CAlayer实例也有一个独自的superlayer和方面装有的子层(sublayers),它创立了一个有层次结构的层,大家称之为layer
tree。layers的绘图似乎views一样是从后迈入绘制的,绘制的时候大家要指定其相对与她们的superlayer的汇集形状,同时还须求创立一个有些的坐标系。layers可以做一些更扑朔迷离的操作,例如rotate(旋转),skew(倾斜),scale(放缩),和project
the layer content(层的影子)。

    图层的情节提供

(1)直接设置层的content属性到一个core
graphics图,只怕通过delegation来安装

(2)提供一个代理直接绘制到Core Graphics image context(核心图形的上下文)

(3)设置任意数量的所有层共有的可视的作风属性。例如:backgroundColor(背景观),opacity(透明度)和masking(遮罩)。max
os x应用通过行使core image filters来达到这种可视化的属性。

(4)子类化CAlayer,同时在更加多的卷入方式中成就地点的随机技术。 

 

  八个关键的子类

(1)CAScrollLayer:它是CALayer的一个子类,用来展现layer的某一有些,一个CAScrollLayer对象的滚动区域是由其子层的布局来定义的。CAScrollLayer没有提供键盘或许鼠标事件,也尚未提供明确的滚动条。

(2)CATextLayer:它是一个很有利就足以从string和attributed
string创立layer的content的类。

(3)CATiledLayer:它同目的在于增量阶段彰显大和复杂的图像(就是将图纸举行分块展现,来压缩

 

   Mac OS X 额外的类

CAOpenGLLayer 提供了一个OpenGL渲染环境。你无法不继续那一个类来行使 OpenGL
提供的故事情节。内容可以是静态的,或可趁着时间的延迟更新。

QCCompositionLayer(由Quartz框架提供)可以把Quartz合成的情节动画 突显。

QTMovieLayer and QTCaptureLayer (QTKit 框架提供)提供播放 QuickTime
影片和视频直播。

 

   iOS 独特的CALayer

CAEAGLLayer 提供了一个OpenGLES渲染环境。

CALayer 的类引入键-值编码包容的容器类概念,相当于说一个类可以应用键 –
值编码的不二法门囤积任意值,而无需成立一个子类。CALayer 的还扩充了
NSKeyValueCoding 的脱产磋商,参与默许键值和额外的结构类型的活动目的包装
(CGPoint,CGSize,CGRect,CGAffineTransform 和 CATransform3D)的协理,并
提供许多那几个构造的要紧路径领域的造访。

CALayer也管理动画和与其有关的layer的actions。layers接收一些从layer
tree中触发的insert和remove消息,修改被成立的layer的习性,可能指明开发者的需要。这个actions平常都会招致动画的发生。

 

1.1.2 动画和计时类(Animation and Timing
Classes)

   
 图层的好多可视化属性是足以隐式动画的。通过不难的更动图层的可动画突显的天性,可以让图层现有属性从此时此刻值动画渐变到新的属性值。例如设置图层的
hidden 属性为 YES 将会触发动画使层逐步淡出。

    暗中同意动画 

   半数以上动画片属性拥有自身关系的暗中同意动画,
你可以轻松地定制和替换。我们将会在前面“动画属性”部分列出一个总体的卡通属性列表和它们相应的默许动画。

   关于怎么样属性执行的是怎样暗许动画效果请参考apple合法文档 

   显式动画

 
 动画的质量也可以显式动画。要显式动画的性质,你需求创建大旨动画动画类的一个实例,并点名所需的视觉效果。显式动画不会改变该
、属性的值,它只是用于动画突显。 

 

   
宗旨动画的动画类使用基本的卡通片和严重性帧动画把图层的情节和挑选的品质动画的显得出来。所有骨干动画的动画类都以从
CAAnimation 类继承而来。

CAAnimation 落成了 CAMediaTiming
协议,提供了动画片的持续时间,速度,和另行计数。 CAAnimation 也促成了
CAAction
协议。该协议为图层触发一个动画动作提供了提供标准响应。动画类同时定义了一个应用贝塞尔曲线来讲述动画改变的大运函数。例如,一个
匀速时间函数(linear timing
function)在动画的整个生命周期里面一直维持速度不变,
而渐缓时间函数(ease-out timing
function)则在动画接近其生命周期的时候减慢速度。核心动画额外提供了一多样抽象的和细化的动画片类,比如:CATransition
提供了一个图层变化的连片效果,它能影响图层的百分之百内容。
动画举行的时候淡入淡出(fade)、推(push)、暴露(reveal)图层的始末。那个过渡效
果可以扩充到您本身定制的 Core Image 滤镜。CAAnimationGroup
允许一文山会海动画效果组合在一块儿,并行呈现动画。

 

三个卡通效果叠加,比如在举办动画的经过中须求同时修改position,alpha,
frame等属性,可以将多少个卡通合成一起实施。

CAAnimationGroup *animGroup = [CAAnimationGroup animation]; 

animGroup.animations = [NSArray arrayWithObjects:moveAnim,scaleAnim,opacityAnim, nil];
animGroup.duration = 1;
[view.layer addAnimation:animGroup forKey:nil];

     

CAPropertyAnimation 是一个华而不实的子类,它帮助动画的显得图层的第一路
径中指定的性质

貌似不直接动用,而是利用它的子类,CABasicAnimation,CAKeyframeAnimation.
在它的子类里修改属性来运行动画。

 

CABasicAnimation 简单的为图层的属性提供修改。

 很多图层的习性修改暗中同意会执行这一个动画类。比如大小,透明度,颜色等质量

 

CAKeyframeAnimation 协理相当主要帧动画,你能够指定的图层属性的第一路径

动画片,包涵动画的各样阶段的价值,以及关键帧时间和计时效能的一体系值。在
动画运行是,每种值被一定的插入值替代。

基本动画 和 Cocoa Animation
同时使用那一个动画类。使用动画片描述,是因为这一个类涉及到大旨动画,这一个将会在Animation
Types and Timing Programming Guide 有较长远的议论。

 

1.1.3 布局管理器类

Application Kit 的视图类相对于 superlayer 提供了经典的“struts and
springs”定位 模型。图层类包容那一个模型,同时 Mac OS X
上边的骨干动画提供了一套特别灵活
的布局管理机制,它同意开发者自身修改布局管理器。核心动画的 CAConstraint
类 是一个布局管理器,它可以指定子图层类限制于您指定的牢笼集合。每一种约束
(CAConstraint 类的实例封装)描述层的几何属性(左,右,顶部或尾部的边缘或水
平或垂直中央)的关联,关系到其同级之一的几何属性层或 superlayer。

通用的布局管理器和约束性布局管理器将会在“布局基本动画的图层”部分研讨。

 

1.1.4 事务管理类    

 图层的卡通属性的各个修改必然是事情的一个部分。CATransaction
是骨干动画里面负责协调三个卡通原子更新突显操作。事务协助嵌套使用。 

  

  

其次章 宗旨动画渲染框架

 只怕有人会很好奇CoreAnimation是如何渲染动画,动画是哪些变迁的。

 在core aniamtion和cocoa
view之间有很大的相似之处,他们中间最大的定义上的争执就是layer不直接渲染到显示器上。

在MVC的设计情势下,NSView和UIView是视图对象,core
animation层实际上是模型对象。他们包裹了几何图形,时间和可视属性,同时提供显示的情节,不过实际上彰显并不是layer的权责。

每种可视的layer tree前面都有七个照应的tree:presentation tree和render
tree。如下图所示:

图片 2

layer
tree包蕴了各个layer的目标模型。当您为一个layer的性质设置一个的时候,他们的值就是您设置的。

The presentation
tree包涵了日前正在呈现给用户作为动画暴发的值。例如:对一个layer的backgroundcolor设置一个新的值的时候,在layer
tree中的值会登时改变。但是,在presentation
tree的相应层的backgroundcolor的值随着要出示给用户的插值颜色会被更新。

当渲染一个layer的时候,the render-tree会使用presentation-tree的值。the
render-tree的权责就是进行独立与程序活动的合成操作;渲染是在一个独立进程可能线程中,以便使其对应用程序的run
loop影响很小。

当一个动画片在举行的历程中,你可以查询相应的presentation
layer的实例。倘使你打算改变如今的卡通并且从当下突显状态开端一个新的动画,那是老大实惠的。

  

 第三章  图层的几何和浮动

 

 图层的几何变化涉及到修改图层的几何属性,比如大小,锚点,圆角等特性等等,那个片段详细的可以查看Quartz
2D
的文档,那些文档讲的比较详细。

 

 3.1图层的坐标系

图层的坐标系在不一样平台方面装有差距性。在 iOS
系统中,专擅认同的坐标系列原点
在图层的中坚左上角地点,原点向右和滞后为正在。在 Mac OS X 系统中,暗许的坐
标系原点在图层的着力左下角地点,原点向右和进化为正值。坐标系的所有值都以浮
点类型。你在其他平台方面创制的图层都应用该平台暗中认可的坐标系。

各样图层定义并爱护和谐的坐标系,它里面的全体内容都经过相关的坐标系指定
地方。该规则同时适应于图层自个儿的始末和它的其余子图层。因为其余图层定义了它
自个儿的坐标系,CALayer
类提供对应的点子用于从一个图层坐标系的点、矩形、大小
值转化为另一个图层坐标系相应的值。

部分基于图层的性情使用单元坐标空间测量它们的值。单元坐标空间指定图层边
界的相对值,而不是相对值。单元坐标空间加以的 x 和 y 的值总是在 0.0 到 1.0
之间。 指定一个沿 X 轴的值为 0.0
的点,得到的是图层左侧缘的一个点,而指定一个 1.0
的点,则是图层左边缘的一个点。(对 Y 轴而言,若是是在 iOS 系统,则 0.0
对应于 顶部的点,而 1.0 则是底层的点,而在 Mac OS X
系统,得到的刚巧相反,就像是在此之前提到的坐标系不相同一样)。而点(0.5,0.5)则刚刚是图层的主干点。

 

 3.2指定图层的几何

纵然图层和图层树与视图和视图的协会在无数地方享有相似性,不过图层的几何
却不同,它尤其简明易懂。图层的保有几何属性,包涵图层的矩阵变换,都可以隐式
和显式动画。

  下图展现可以在前后文中指定图层几何的属性: 

图片 3

图层的
position 属性是一个 CGPoint 的值,它指定图层约等于它父图层的职位,
该值基于父图层的坐标系。

图层的
bounds 属性是一个 CGRect 的值,指定图层的深浅(bounds.size)和图层的
原点(bounds.origin)。当您重写图层的重画方法的时候,bounds
的原点可以看作图形 上下文的原点。

图层拥有一个隐式的 frame,它是 position,bounds,anchorPoint 和
transform 属性 的一局部。设置新的 frame 将会相应的转移图层的 position 和
bounds 属性,可是 frame 本人并没有被保存。可是设置新的 frame 时候,bounds
的原点不受干扰,bounds 的大 小变为 frame 的大大小小,即
bounds.size=frame.size。图层的职位被设置为相对于锚点 (anchor
point)的适合岗位。当您设置 frame 的值的时候,它的盘算办法和 position、
bounds、和 anchorPoint 的性质相关。

图层的
anchorPoint 属性是一个 CGPoint 值,它指定了一个依照图层 bounds 的符
合地方坐标系的位置。锚点(anchor point)指定了 bounds 相对于 position
的值,同
时也作为变换时候的支点。锚点使用单元空间坐标系表示,(0.0,0.0)点接近图层
的原点,而(1.0,1.0)是原点的对角点。改变图层的父图层的变换属性(尽管存在
的话)将会影响到 anchorPoint 的势头,具体变化在于父图层坐标系的 Y 轴。 

当您设置图层的 frame 属性的时候,position 会按照锚点(anchorPoint)相应的改
变,而当您设置图层的 position 属性的时候,bounds
会依照锚点(anchorPoint)做相应的改动。 

 

下图描述了依照锚点的八个示例值:

 

 图片 4

anchorPoint 默许值是(0.5,0.5),位于图层边界的主导点(如上图显示),B 点 把
anchorPoint 设置为(0.0,0.5)。最终 C 点(1.0,0.0)把图层的 position 设置为
图层 frame 的右下角。该图适用于 Mac OS X 的图层。在 iOS
系统内部,图层使用不一致的坐标系,相应的(0.0,0.0)位于左上角,而(1.0,1.0)位于右下角。

图层的 frame、bounds、position 和 anchorPoint 关系如下图所示: 

 图片 5

  在该示例中,anchorPoint
暗中认可值为(0.5,0.5),位于图层的着力点。图层的 position
值为(100.0,100.0),bounds 为(0.0,0.0,120,80.0)。通过测算得到图层的
frame为(40.0,60.0,120.0,80.0)。

只要你新成立一个图层,则惟有设置图层的 frame
为(40.0,60.0,120.0,80.0),

对应的 position 属性值将会自行安装为(100.0,100.0),而 bounds 会自动安装为
(0.0,0.0,120.0,80.0)。

下图体现一个图层具有同等的
frame(如上图),可是在该图中它的 anchorPoint
属性值被安装为(0.0,0.0),位于图层的左下角地方。

 图片 6

  图层的
frame 值同样为(40.0,60.0,120.0,80.0),bounds 的值不变,但是图层的 position
值已经改成为(40.0,60.0)。

图层的几何外形和 Cocoa
视图其余一个例外地方是,你能够设置图层的一个边角
的半径来把图层显示为圆角。图层的 cornerRadius
属性指定了重绘图层内容,剪切子
图层,绘制图层的界限和影子的时候时候圆角的半径。

图层的 zPosition
属性值指定了该图层位于 Z 轴上面地方,zPosition 用于安装图层
相对于图层的同级图层的可视地方

 

 3.3 图层的几何变换

图层一旦成立,你就足以由此矩阵变换来改变一个图层的几何样子。 

CATransform3D
的数据结构定义一个同质的三维变换(4×4 CGFloat 值的矩阵),用于
图层的团团转,缩放,偏移,歪斜和利用的透视。

图层的五个属性指定了转移矩阵:transform 和 sublayerTransform 属性。图层的
transform 属性指定的矩阵结合图层的 anchorPoint
属性成效于图层和图层的子图层上 面。图 3 显示在运用 anchorPoint
默许值(0.5,0.5)的时候转动和缩放变换怎么着影响一个图层。而图 4
呈现了相同的矩阵变换在 anchorPoint 为(0.0,0.0)的时候什么改变一
个图层。图层的 sublayerTransform
属性指定的矩阵只会潜移默化图层的子图层,而不会对 图层自己发生潜移默化。

你可以由此以下的别样一个措施改变
CATransform3D 的数据结构:

(1) 使用CATransform3D函数

(2) 直接改动数据结构的分子

(3) 使用键-值编码改变键路径

CATransform3DIdentity
是单位矩阵,该矩阵没有缩放、旋转、歪斜、透视。把该
矩阵应用到图层上边,会把图层几何属性修改为暗中认同值。 

 3.3.1 变换函数

使用变换函数可以在宗旨动画里面在操作矩阵。你可以利用那些函数(如下表)去
创制一个矩阵一般前边用于转移图层可能它的子图层的 transform 和
sublayerTransform属性。变换函数或然直接操大概重回一个CATransform3D的数目结
构。那足以让您可以打造简单或复杂的转换,以便重复使用。

图片 7

大旨动画
提供了用于转移矩阵的变换函数 CATransform3DInvert。一般是用反转
点内转化对象提供反向转换。当你须要復苏一个一度被转移了的矩阵的时候,反转将
会卓殊有扶持。反转矩阵乘以逆矩阵值,结果是原始值。

变换函数同时允许你把 CATransform3D
矩阵转化为 CGAffineTransform(仿射) 矩阵,前提是 CATransform3D
矩阵选择如下表示方法。

图片 8

变换函数同时提供了足以相比一个转换矩阵是不是是单位矩阵,或许几个矩阵是还是不是相等。

图片 9

3.3.2 修改变换的数据结构

你可以修改 CATransform3D
的数据结构的成分为其余其余你想要的数据值。清单 1 蕴涵了 CATransform3D
数据结构的概念,结构的分子都在其相应的矩阵地点。



struct CATransform3D

               {

                 CGFloat m11, m12, m13, m14;

                 CGFloat m21, m22, m23, m24;

                 CGFloat m31, m32, m33, m34;

                 CGFloat m41, m42, m43, m44;

                 };

               typedef struct CATransform3D CATransform3D;

               

               清单 2 中的示例表明了什么安顿一个 CATransform3D
一个角度变换。

              图片 10

               

   3.3.3 通过键值路径修改变换

   
大旨动画扩大了键-值编码协议,允许通过重大路径获取和设置一个图层的
CATransform3D 矩阵的值。表 4 描述了图层的 transform 和 sublayerTransform
属性的呼应关键路径。

   
图片 11

   

    你不能够通过 Objective-C 2.0
的性格来设置结构域的值,比如下边的代码将会不大概正常运转:

   

    myLayer.transform.rotation.x=0;

     

    替换的格局是,你不大概不通过
setValue:forKeyPath:大概 valueForKeyPath:方法, 具体如下:

          [myLayer
setValue:[NSNumber numberWithInt:0]
forKeyPath:@”transform.rotation.x”];

 

 3.4 图层的操作

图层有一个图层树,既然是树,就允许添加,插入,删除,替换相应的图层,

 那一个操作都得以通过已有的api完结,api如下

图片 12

 

 3.5 图层的情节

 图层的内容提供,是指通过一种办法来制订CALayer 实例的始末:

 其中有刹那间三种办法来提供CAlayer的始末

  (1)使用带有图表内容的 CGImageRef 来显式的设置图层的 contents
的个性。

  (2)指定一个委托,它提供或然重绘内容。

  (3)继承 CALayer 类重载显示的函数。

 

第四章 动画

卡通是昨天用户界面的关键因素。当使用基本动画的时候,动画是机动已毕的。
没有动画的大循环和计数器。你的应用程序不负负责重绘,也不担负盯梢动画的近日状
态。动画在单独线程里面自动执行,没有和您的应用程序交互。

焦点动画提供了一套你可以在你应用程序里面使用的动画类的突显:

  (1)CABasicAnimation提供了在图层的习性值间不难的插入。

  (2)CAKeyframeAnimation
提供援助相当主要帧动画。你指定动画的一个图层属性的首要性路径,一个象征在动画的每一种阶段的市值的数组,还有一个关键帧时间的数组和时间函数。

 
(3)CATransition提供了一个影响整个图层的情节对接效果。在动画展现进度中应用淡出(fade)、推出(push)、流露(reveal)图层的故事情节。
常用的联网效果可以由此提供你协调定制的骨干图像滤镜来伸张。除了要指定展现的卡通类型,你还必须指定动画的间距、它的进程(它的插值怎么着分布在全路动画进程)、动画循环时候的循环次数、动画周期达成的时候是或不是自动
的反转、还有动画截至的时候它的可视化状态。动画类和 CAMediaTiming
协议提供
所有那些效用依然更加多的效益。CAAnimation、它的子类、时序协议被着力动画和Cocoa
Animation Proxy功效共享。那几个类将会在“动画类型和时序编程指南(Animation
Types and Timing Programming Guide)”里面详细介绍。

             Core Animation 类的后续关系图 

图片 13

 

 下边将针对地点的学识做一个图形动画的demo

 图片 14

 

成效1 :移动图片到右下角

 

//向右下角收缩移动
– (IBAction)buttonClick:(id)sender
{
    
    CGPoint fromPoint = imageView.center;
    
    //路径曲线
    UIBezierPath *movePath = [UIBezierPath bezierPath];
    [movePath moveToPoint:fromPoint];
     CGPoint toPoint = CGPointMake(300, 460);
    [movePath addQuadCurveToPoint:toPoint
                     controlPoint:CGPointMake(toPoint.x,fromPoint.y)];
    
   //关键帧
    CAKeyframeAnimation *moveAnim = [CAKeyframeAnimation animationWithKeyPath:@”position”];
    moveAnim.path = movePath.CGPath;
    moveAnim.removedOnCompletion = YES;
    
    //旋转变化
    CABasicAnimation *scaleAnim = [CABasicAnimation animationWithKeyPath:@”transform”];
    scaleAnim.fromValue = [NSValue valueWithCATransform3D:CATransform3DIdentity];
    //x,y轴裁减到0.1,Z 轴不变
    scaleAnim.toValue = [NSValue valueWithCATransform3D:CATransform3DMakeScale(0.1, 0.1, 1.0)];
    scaleAnim.removedOnCompletion = YES;
    
    //透明度变化
    CABasicAnimation *opacityAnim = [CABasicAnimation animationWithKeyPath:@”alpha”];
    opacityAnim.fromValue = [NSNumber numberWithFloat:1.0];
    opacityAnim.toValue = [NSNumber numberWithFloat:0.1];
    opacityAnim.removedOnCompletion = YES;
    
    //关键帧,旋转,透明度组合起来执行
    CAAnimationGroup *animGroup = [CAAnimationGroup animation];
    animGroup.animations = [NSArray arrayWithObjects:moveAnim, scaleAnim,opacityAnim, nil];
    animGroup.duration = 1;
    [imageView.layer addAnimation:animGroup forKey:nil];

 成效2 :移动图片到右下角

 //向左侧转悠

– (IBAction)rightRotateBtnClick:(id)sender
{
    CGPoint fromPoint = imageView.center;
    UIBezierPath *movePath = [UIBezierPath bezierPath];
    [movePath moveToPoint:fromPoint];
    CGPoint toPoint = CGPointMake(fromPoint.x +100 , fromPoint.y) ;
    
    [movePath addLineToPoint:toPoint];
    
    CAKeyframeAnimation *moveAnim = [CAKeyframeAnimation animationWithKeyPath:@”position”];
    moveAnim.path = movePath.CGPath;

    CABasicAnimation *scaleAnim = [CABasicAnimation animationWithKeyPath:@”transform”];
    scaleAnim.fromValue = [NSValue valueWithCATransform3D:CATransform3DIdentity];
    
    //沿Z轴旋转
    scaleAnim.toValue = [NSValue valueWithCATransform3D: CATransform3DMakeRotation(M_PI,0,0,1)];
    
    //沿Y轴旋转
   // scaleAnim.toValue = [NSValue valueWithCATransform3D: CATransform3DMakeRotation(M_PI,0,1.0,0)];
    
   //沿X轴旋转
  // scaleAnim.toValue = [NSValue valueWithCATransform3D: CATransform3DMakeRotation(M_PI,1.0,0,0)];
    scaleAnim.cumulative = YES;
    scaleAnim.duration =1;
  //旋转2遍,360度    
    scaleAnim.repeatCount =2;
    imageView.center = toPoint;
    scaleAnim.removedOnCompletion = YES;
    CAAnimationGroup *animGroup = [CAAnimationGroup animation];
    animGroup.animations = [NSArray arrayWithObjects:moveAnim, scaleAnim, nil];
    animGroup.duration = 2;
    
    [imageView.layer addAnimation:animGroup forKey:nil];

}

 

功能3 :图片旋转360度

 

//图片旋转360度
– (IBAction)rota360BtnClick:(id)sender
{
    CABasicAnimation *animation = [ CABasicAnimation
                                   animationWithKeyPath: @”transform” ];
    animation.fromValue = [NSValue valueWithCATransform3D:CATransform3DIdentity];
    
    //围绕Z轴旋转,垂直与显示器
    animation.toValue = [ NSValue valueWithCATransform3D: 

CATransform3DMakeRotation(M_PI, 0, 0, 1.0) ];
    animation.duration = 1;
    //旋转效果累计,先转180度,接着再旋转180度,从而落成360转悠
   animation.cumulative = YES;
   animation.repeatCount = 2;
    
    //在图纸边缘添加一个像素的透明区域,去图片锯齿
    CGRect imageRrect = CGRectMake(0, 0,imageView.frame.size.width, imageView.frame.size.height);
    UIGraphicsBeginImageContext(imageRrect.size); 
    [imageView.image drawInRect:CGRectMake(1,1,imageView.frame.size.width-2,imageView.frame.size.height-2)];
    imageView.image = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    
   [imageView.layer addAnimation:animation forKey:nil];
}

 

参照文档:

CoreAnimation官方文档地址

http://blog.163.com/donald\_wong5/blog/static/190962406201191912456928/

Core Animation for Mac OS X and the 摩托罗拉   下载地址 

http://www.cocoachina.com/bbs/read.php?tid=12133&ordertype=asc

http://xxxxxfsadf.iteye.com/blog/565785 

中央动画编程指南 

 Quartz 2D官方文档

 https://developer.apple.com/library/prerelease/ios/\#documentation/GraphicsImaging/Conceptual/drawingwithquartz2d/Introduction/Introduction.html\#//apple\_ref/doc/uid/TP30001066

 项目文件下载

 开源Core Animation
示例CA360

 此外一个示范demo,很好很强大

 

 

相关文章