概述


  • 简介

    • 核心动画提供了一组非常强大的动画API,通过该组API可以高效的实现绝大部分绚丽的动画效果
  • 注意事项
    • 核心动画的操作在子线程中执行,不会阻塞主线程
    • 核心动画直接作用与CALayer对象上,不是UIView对象上
  • 核心动画与UIView动画的区别
    • 核心动画不会改变控件的frame属性,显示的只是一种假象
    • UIView动画会改变控件的frame属性,显示的是控件真实地frame属性

核心动画类


  • 核心动画相关类的关系图

    • 此图来源官方文档,不知为何右下角不是CAKeyframeAnimation,而是协议。CAKeyframeAnimation为CAPropertyAnimation的可直接使用子类
  • CAAnimation与CAPropertyAnimation

    • 二者都是抽象类,不可以直接使用,需要使用其子类
    • CAAnimation可直接使用的子类,
      • CAAnimationGroup,组动画
      • CATransaction,转场动画
    • CAPropertyAnimation可直接使用的子类
      • CABasicAnimation,基本动画
      • CAKeyframeAnimation,关键帧动画

CAAnimation类


  • 3个重要的属性

    • timingFunction(CAMediaTimingFunction *),速度控制函数
    • delegate(id),动画代理
    • removedOnCompletion(BOOL),动画执行完毕是否将其从图层上移除

CAAnimation的代理方法


  • 注意

    • CAAnimation的代理方法是以NSObject分类的方式实现的,如图

  • 代理方法

    • 动画开始时调用
    - (void)animationDidStart:(CAAnimation *)anim;
    • 动画结束时调用
    - (void)animationDidStop:(CAAnimation *)anim finished:(BOOL)flag;

CAMediaTiming协议


  • 常用属性如图中属性

    • beginTime(CFTimeInterval),开始时间
    • duration(CFTimeInterval),单次动画的执行时间
    • speed(float),动画速度
    • timeOffset(CFTimeInterval),从时间偏移量timeOffset开始执行动画,并将timeOffset之前的动画压缩并拼接到尾部
    • repeatCount(float),重复次数
    • repeatDuration(CFTimeInterval),动画的重复时间,与repeatCount两者选择时间最短者
    • autoreverses(BOOL),是否恢复到动画开始状态(以动画的方式)
    • fillMode(NSString *),动画的填充模式

动画的填充模式


  • 注意

    • 若要使填充模式有效,通常设置动画的removedOnCompletion属性为NO
  • 4种模式
    • kCAFillModeForwards,动画结束后,layer保持动画结束的状态
    • kCAFillModeBackwards,动画加入到layer中,立即进入动画初始状态等待动画开始执行
    • kCAFillModeBoth,同时具备以上两种模式
    • kCAFillModeRemoved,动画结束后,layer会恢复到原来的状态

动画的速度控制函数


  • kCAMediaTimingFunctionLinear,匀速
  • kCAMediaTimingFunctionEaseIn,缓慢进入,加速离开
  • kCAMediaTimingFunctionEaseOut,全速进入,减速到达目标地点
  • kCAMediaTimingFunctionEaseInEaseOut,缓慢进入,中途加速,减速到达目标地点
  • kCAMediaTimingFunctionDefault,默认速度,即kCAMediaTimingFunctionEaseInEaseOut

最新文章

  1. 窥探Vue.js 2.0 - Virtual DOM到底是个什么鬼?
  2. 测试或运维工作过程中最常用的几个linux命令?
  3. Android的进程等级
  4. python基础数据类型
  5. maven PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path
  6. 用java程序调用ffmpeg执行视频文件格式转换flv
  7. 从零开始之ecshop基础篇(17)
  8. C语言之复杂指针详解
  9. MySQL与Oracle 差异比较之五存储过程&Function
  10. HDU 2340 Obfuscation(dp)
  11. 如何让OpenSSL得到JKS格式的keystore中的public and private key
  12. 关于OC头文件互相引用的问题
  13. UICollectionView 很简单的写个瀑布流
  14. 怎样获取HTML5视频的持续时间
  15. 打造适合你的ABP(1)---- 完善日志系统
  16. Android总结篇系列:Activity中几个主要函数详解
  17. OEL的下载
  18. restore not found的错误
  19. VC++ 常见问题及其解决方法
  20. 【洛谷P1101】单词方阵

热门文章

  1. 2014 网选 5014 Number Sequence(异或)
  2. LeetCode——Merge k Sorted Lists
  3. Win10系统80端口被pid=4的System进程占用 -- 解决方法
  4. 通过LINQ表达式树动态构建查询条件
  5. 四则运算APP(BUG发掘)
  6. Node.js基于Express框架搭建一个简单的注册登录Web功能
  7. JS对象的创建与使用
  8. WPF 中获取DataGrid 模板列中控件的对像
  9. 解决死锁SQL
  10. 整合spring,springmvc和mybatis