着力动画 CoreAnimation

 

 第一章 宗旨动画概念

骨干动画,开发人士可以为她们的选拔创造动态用户界面,而无需使用低级其他图形
API,如 OpenGL 来取得便捷的卡通品质。

 

序言,焦点动画的裨益

1.简练易用的高品质混合编程模型。

2.近似视图一样,你能够经过应用图层来创立复杂的接口。

   通过是CALayer来使用更复杂的一部分动画片。

   

3.轻量级的数据结构,它可以同时出示并让广大个图层发生动画效果。

     控制多少个CALayer来展现动画效果

     

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

单独于主线程之外。

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

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

上运行的应用程序代码。

7.灵活的布局管理模型。蕴含允许图层相对同级图层的关联来设置相应属性的岗位和大小。

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

 

 1.1 Core animation类

1.提供显示内容的图层类。CALayer

2.动画片和计时类。Animation and Timing Classes

3.布局和约束类。

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

基本动画的底蕴类富含在 Quartz 焦点框架(Quartz Core
framework)里面,纵然它的任何图层类在任何框架之中定义。下图突显了主旨动画的类层次结构。 

2018正版葡京赌侠诗 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。如下图所示:

2018正版葡京赌侠诗 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指定图层的几何

即使图层和图层树与视图和视图的布局在广大上面具有相似性,可是图层的几何
却今非昔比,它进一步简便易行易懂。图层的具备几何属性,包蕴图层的矩阵变换,都得以隐式
和显式动画。

  下图展现可以在左右文中指定图层几何的品质: 

2018正版葡京赌侠诗 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)做相应的改观。 

 

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

 

 2018正版葡京赌侠诗 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 关系如下图所示: 

 2018正版葡京赌侠诗 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),位于图层的左下角地方。

 2018正版葡京赌侠诗 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的数据结
构。那足以让您可知创设不难或复杂的转换,以便重复使用。

2018正版葡京赌侠诗 7

主旨动画
提供了用来转移矩阵的变换函数 CATransform3DInvert。一般是用反转
点内转化对象提供反向转换。当您要求还原一个业已被撤换了的矩阵的时候,反转将
会格外有支持。反转矩阵乘以逆矩阵值,结果是原始值。

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

2018正版葡京赌侠诗 8

变换函数同时提供了足以相比较一个转换矩阵是或不是是单位矩阵,只怕多个矩阵是或不是相等。

2018正版葡京赌侠诗 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
一个角度变换。

              2018正版葡京赌侠诗 10

               

   3.3.3 通过键值路径修改变换

   
核心动画扩大了键-值编码协议,允许通过机要路径获取和安装一个图层的
CATransform3D 矩阵的值。表 4 描述了图层的 transform 和 sublayerTransform
属性的附和关键路径。

   
2018正版葡京赌侠诗 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如下

2018正版葡京赌侠诗 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 类的持续关系图 

2018正版葡京赌侠诗 13

 

 上面将对准地点的文化做一个图纸动画的demo

 2018正版葡京赌侠诗 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”]2018正版葡京赌侠诗,;
    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,很好很有力

 

 

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图