CoreAnimation-04-核心动画必备基础
2024-09-27 06:09:30
概述
- 简介
- 核心动画提供了一组非常强大的动画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
最新文章
- 窥探Vue.js 2.0 - Virtual DOM到底是个什么鬼?
- 测试或运维工作过程中最常用的几个linux命令?
- Android的进程等级
- python基础数据类型
- maven PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path
- 用java程序调用ffmpeg执行视频文件格式转换flv
- 从零开始之ecshop基础篇(17)
- C语言之复杂指针详解
- MySQL与Oracle 差异比较之五存储过程&;Function
- HDU 2340 Obfuscation(dp)
- 如何让OpenSSL得到JKS格式的keystore中的public and private key
- 关于OC头文件互相引用的问题
- UICollectionView 很简单的写个瀑布流
- 怎样获取HTML5视频的持续时间
- 打造适合你的ABP(1)---- 完善日志系统
- Android总结篇系列:Activity中几个主要函数详解
- OEL的下载
- restore not found的错误
- VC++ 常见问题及其解决方法
- 【洛谷P1101】单词方阵