如何娶到比尔盖茨的女?——破局思维

着力动画 CoreAnimation

产品设计词典01:破局思维

 

以一个欢聚蒙,杰克走向比尔盖茨…
杰克:我来提携您丫介绍个好爱人。
比尔:我闺女还无想嫁呢!
杰克:但自我说的立即小伙子,可是世界银行之符合总裁喔!
比尔:哇!那这样的话…

 第一章节 核心动画概念

接著,杰克去表现世界银行之总裁。
杰克:我思介绍一个小伙来当贵行的入总裁。
总裁:我们已有无数号可总裁,够多矣!
杰克:但我说的当即小伙,可是比尔盖茨的女婿喔!
总裁:哇!那这样的话…
倘此青年人就是杰克的崽,于是,杰克的小子娶了比尔盖茨的幼女,
再就是当上世界银行之可总裁…

核心动画,开发人员可以吗他们的施用创建动态用户界面,而不论是需下低级别的图样
API,如 OpenGL 来赢得便捷的动画片性能。

这个笑话中,杰克其实是找到了清除局点,戳中了比尔盖茨和世界银行之总裁的诉求点,从而帮助协调的儿找到了儿媳妇及办事。具体来说,杰克很懂自己最后想只要观看底后果是呀,在解析了有关的丁之好处与诉求关系后,找到了多米诺骨牌的头颅,指头轻轻一点,所有的牌应声倒下,形成了最终之则。

 

当实际上工作以及生存中,

序言,核心动画的功利

博题目不是说,你生出钱有资源来真情,就可以化解的。你得意识及,有时得发一个导火索,一个杠杆,去逗一系列的生成,有效率的给其他子任务来。

1.简易好用之大性能混合编程模型。

比如:

2.近乎视图一样,你可以透过以图层来创造复杂的接口。

  • 使设置一个线下分享会,准备邀请同样众大佬。在无品牌,钱及人脉的情下,如给同一博大佬都来参加?(即使让钱,一线好佬也会不屑)要处以成是活动的根本,就是只要挑动二丝好佬。你要使用各种可用之方,让有些亚丝好佬愿意来与,搞定是以后,就可将在当时波二线大佬的名册,去同均等丝好佬谈判,并且,只要来相同位一丝很佬愿意到,后续的事体也会见换得易了。

  • 思大概一个欢喜的妹子下了,但是跟这个妹子不是特别成熟,担心邀约两只单身出去,妹子会当尴尬。于是你得拉几个人(最好是阿妹认识,有安全感的人头),一起错过玩一个哟,或到一个活动,以这样的话术去邀约,这样妹子就是不见面认为有啊不妥。至于那些口来无来,甚至是未是忠实是且未那么重要。

   通过是CALayer来使用重复扑朔迷离的组成部分动画片。

小结一下,应用破局思维解决问题的步骤:

   

  • 万一知自己想要的圈是啊。
  • 梳理各个角色的实际诉求和利益点。
  • 找到多米诺骨牌的脑瓜儿,即分析出第一人同工作,然后为定ta。

3.轻量级的数据结构,它可同时显示并给森独图层产生动画效果。

     控制多单CALayer来显示动画效果

     

 
4.等同模拟简单的卡通片接口,可以让您的动画片运行在单独的线程里面,并得以

单独为主线程之外。

5.只要动画配置好并启动,核心动画完全控制并独立完成相应的动画帧。

6.提高运用性能。应用程序只当有转移之早晚才重绘内容。再稍加的应用程序也亟需改以及供布局服务层。核心动画还免去了在动画的帧速率

达成运行的应用程序代码。

7.灵活的布局管理模型。包括允许图层相对同级图层的涉嫌来设置相应属性的职及尺寸。

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

 

 1.1 Core animation类

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

2.动画以及计时类。Animation and Timing 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 iPhone   下载地址 

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,很好充分强劲

 

 

发表评论

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