CATransaction

当我们在自定义的图层上修改某些支持动画的属性时,系统会为该属性的修改自动产生动画。这种其实属于隐式动画。隐式动画要得益于CATransaction. 一个CATransaction从调用CATransaction.begin()开始,以CATransaction.commit()结束。在这其间对图层属性的修改,会受该Transaction的控制,可以通过setAnimationDuration修改Transaction的duration.

系统的隐式动画是因为在Runloop的每个周期,系统会自动调用CATransaction.begin()和commit()方法,默认的duration时0.25秒。当然我们也可以在代码中自己通过调用begin()将自己的Transaction压栈,从而定义不同的配置。

但是UIView相关联的layer默认是禁掉了隐式动画功能。所以系统为我们提供了UIView.animationWithDuration方法。其实就是在内部调用了CATransaction.begin()和commit()方法来实现。

CABasicAnimation/CAKeyframesAnimation

这两个类都是CAPropertyAnimation的派生类,他们都是用来显式的对某个属性进行动画。

CABasicAnimation:可以配置fromValue,toValue来定义从fromValue到toValue的过度动画。

CAKeyframesAnimation:可以配置keyTimes和values来定义一组关键值和对应的时间节点,来定义这些关键值之间的过渡动画

这两个类都是只产生一个过渡效果呈现出来,动画结束后,属性的值仍然不会被改变。需要设置Animation对象的delegate和在delegate对象中实现

override func animationDidStop(anim: CAAnimation, finished flag: Bool) 来接受动画结束的通知,在这里来最终改变属性的值。

CATransition

对于不支持动画的属性,我们可以用CATransition来使用预定义的动画来产生过渡效果。我的理解是Transition会应用于当前Runloop周期中图层上所有产生的变化,新添加的图层,属性的变化....

Transition有几个关键属性

type属性定义要应用的动画类型,有如下选项:

1. 系统定义的常量 
     kCATransitionFade   交叉淡化过渡 
     kCATransitionMoveIn 新视图移到旧视图上面 
     kCATransitionPush   新视图把旧视图推出去 
     kCATransitionReveal 将旧视图移开,显示下面的新视图 
  
 2.系统未定义为常量,用字符串表示 
     pageCurl            向上翻页 
     pageUnCurl          向下翻页 
     rippleEffect        滴水效果 
     suckEffect          收缩效果,如一块布被抽走 
     cube                立方体效果 
     oglFlip             上下翻转效果

subtype属性用来定义某些type的动画方向,有如下值可选:

kCATransitionFromTop

kCATransitionFromBottom

kCATransitionFromRight

kCATransitionFromLeft

CAMediaTiming协议

该协议定义了动画过程中的时间控制,有如下主要属性

duration 一个动画周期的时间

repeatCount 重复次数

beginTime 动画从加入到开始的延迟时间

speed 动画速度,默认为1.0,如果设为2.0,则动画速度增加一倍,相当于动画时间减小为原来的一半

timeOffset 设置动画从某个时间点开始

CAAnimation和CALayer都实现了这个协议,因此我们可以设置CALayer的属性来统一控制加入到图层的所有动画,也可以通过设置CAAnimation的属性来控制动画。

最新文章

  1. python读取excel数据,并可视化展现
  2. 套题 codeforces 360
  3. 在CSV文件中增加一列属性值
  4. linux敲入命令不记录的方法
  5. Win7/8下提示OpenSCManager failed 拒绝访问
  6. C#编写 "Hello,Word!" 您的第一个程序。
  7. Mac添加或修改环境变量
  8. Android线程之Thread 、Runnable 的两个例子
  9. Spring MVC知识点整理
  10. json pickle ;shelve
  11. ffmpeg-3.2.4-static-win32-for-XP-bin.tar.xz
  12. iostat中的util和svctm (Two traps in iostat: %util and svctm)
  13. 分享我对JS插件开发的一些感想和心得
  14. 098实战 Job的调度
  15. SCI写作经典替换词
  16. rapidxml 序列化
  17. Linux实战教学笔记22:企业级NFS网络文件共享服务
  18. Dictionary<Tkey.TValue>与SortedList
  19. 微软编程一小时 题目2: Longest Repeated Sequence
  20. ZT自贴吧 说说你是怎么和恋人确定恋爱关系的?

热门文章

  1. 关于feature创建Lookup列的BUG
  2. TCP/IP, HTTP, socket
  3. VBS基础篇 - Err对象
  4. 在云服务器搭建WordPress博客(四)WordPress的基本设置
  5. .NET4安装总进度一直不动的解决办法
  6. 在Eclipse中使用Propertites Editor插件来解决property文件中文显示乱码
  7. 平常写css网页制作时最实用的九条CSS技巧
  8. 剑指offer--面试题19
  9. linux vi修改后如何保存
  10. 【WCF--初入江湖】11 安全