一、Core Animation简介

* Core Animation,中文翻译为核心动画,它是一组非常强大的动画处理API,使用它能做出非常炫丽的动画效果,而且往往是事半功倍。也就是说,使用少量的代码就可以实现非常强大的功能。

* Core Animation可以用在Mac OS X和iOS平台。

* 乔帮主在2007年的WWDC大会上亲自为你演示Core Animation的强大:点击查看视频

* Core Animation的动画执行过程都是在后台操作的,不会阻塞主线程。

* 要注意的是,Core Animation是直接作用在CALayer上的,并非UIView。

二、Core Animation的使用步骤

1.使用它需要先添加QuartzCore.framework框架和引入主头文件<QuartzCore/QuartzCore.h>

2.初始化一个CAAnimation对象,并设置一些动画相关属性

3.通过调用CALayer的addAnimation:forKey:方法增加CAAnimation对象到CALayer中,这样就能开始执行动画了

4.通过调用CALayer的removeAnimationForKey:方法可以停止CALayer中的动画

三、CAAnimation

* 从前面的叙述可以看出,要想执行动画,就必须初始化一个CAAnimation对象。

* 其实,一般情况下,我们使用的比较多的是CAAnimation的子类,因此,先大致看看CAAnimation的继承结构:

黑线代表继承,黑色文字代表类名,白色文字代表属性。其中CAMediaTiming是一个协议(protocol)。

1.CAAnimation的常用属性

* CAAnimation是所有动画类的父类,但是它不能直接使用,应该使用它的子类

* 常见属性有:

1> duration:动画的持续时间

2> repeatCount:动画的重复次数

3> timingFunction:控制动画运行的节奏

timingFunction可选的值有:
  • kCAMediaTimingFunctionLinear(线性):匀速,给你一个相对静态的感觉
  • kCAMediaTimingFunctionEaseIn(渐进):动画缓慢进入,然后加速离开
  • kCAMediaTimingFunctionEaseOut(渐出):动画全速进入,然后减速的到达目的地
  • kCAMediaTimingFunctionEaseInEaseOut(渐进渐出):动画缓慢的进入,中间加速,然后减速的到达目的地。这个是默认的动画行为。

4> delegate:动画代理,用来监听动画的执行过程

代理对象需要实现的方法有:(这几个方法被定义在某个分类中)

1 @interface NSObject (CAAnimationDelegate)
2 // 动画开始执行的时候触发这个方法
3 - (void)animationDidStart:(CAAnimation *)anim;
4
5 // 动画执行完毕的时候触发这个方法
6 - (void)animationDidStop:(CAAnimation *)anim finished:(BOOL)flag;
7 @end

* 上面介绍的所有属性都是属于CAAnimation的,因此,CAAnimation的所有子类都能使用它们。

2.其他

* CAPropertyAnimation也是不能直接使用的,也要使用它的子类

* 所以,能用的动画类只剩下4个:CABasicAnimation、CAKeyframeAnimation、CATransition、CAAnimationGroup

四、CAPropertyAnimation

* CAPropertyAnimation是CAAnimation的子类,但是不能直接使用,要想创建动画对象,应该使用它的两个子类:CABasicAnimation和CAKeyframeAnimation

* 它有个NSString类型的keyPath属性,你可以指定CALayer的某个属性名为keyPath,并且对CALayer的这个属性的值进行修改,达到相应的动画效果。比如,指定@"position"为keyPath,就会修改CALayer的position属性的值,以达到平移的动画效果

* 因此,初始化好CAPropertyAnimation的子类对象后,必须先设置keyPath,搞清楚要修改的是CALayer的哪个属性,执行的是怎样的动画

最新文章

  1. 安装hadoop+zookeeper ha
  2. CentOs中yum安装LAMP+PHPMYADMIN
  3. 【Win10 UWP】URI Scheme(二):自定义协议的处理和适用场景
  4. Mysqldump源码分析
  5. Android之startActivityForResult的使用
  6. Cyclic Nacklace
  7. 【BZOJ】【1965】SHUFFLE 洗牌
  8. uva 10051
  9. java初学者必看经典
  10. JSP的改动需要重启应用服务器才能生效?
  11. javaCV开发详解之7:让音频转换更加简单,实现通用音频编码格式转换、重采样等音频参数的转换功能(以pcm16le编码的wav转mp3为例)
  12. 反射+自定义注解---实现Excel数据列属性和JavaBean属性的自动映射
  13. 洛谷P2617 Dynamic Ranking(主席树,树套树,树状数组)
  14. 002 requests的使用方法以及xpath和beautifulsoup4提取数据
  15. 数据分析之numpy模块
  16. wap2app(六)-- wap2app的原生标题头无法隐藏
  17. jQuery操作radio、checkbox、select总结
  18. OpenCV学习笔记之课后习题练习2-3
  19. SSH2框架实现注冊发短信验证码实例
  20. php 关联数组遍历

热门文章

  1. Python基础笔记系列十三:socket网络编程
  2. 通栏banner自适应各个设备
  3. 利用Java.util.UUID来生成唯一ID(用来做数据库主键好用)
  4. JQuery常用和很有用处的方法
  5. C++中输入输出十六进制八进制
  6. 安装 python 数据分析插件 pandas
  7. 在.net中运用HTMLParser解析网页的原理和方法
  8. AtCoder Regular Contest 078D
  9. 玲珑oj 1028 贪心
  10. css布局(转载)