IOS-CoreAnimation
2024-10-18 18:19:53
核心动画
•Core Animation是一组非常强大的动画处理API,使用它能做出非常炫丽的动画效果,而且往往是事半功倍!
•使用它需要先添加QuartzCore.framework和引入对应的框架<QuartzCore/QuartzCore.h>
•开发步骤:
1.初始化一个动画对象(CAAnimation)并设置一些动画相关属性
2.CALayer中很多属性都可以通过CAAnimation实现动画效果,包括:opacity、position、transform、bounds、contents等(可以在API文档中搜索:CALayer Animatable Properties)
3.添加动画对象到层(CALayer)中,开始执行动画
4.通过调用CALayer的addAnimation:forKey增加动画到层(CALayer)中,这样就能触发动画了。通过调用removeAnimationForKey可以停止层中的动画
5.Core Animation的动画执行过程都是在后台操作的,不会阻塞主线程
CAAnimation——动画填充模式
•fillMode属性值(要想fillMode有效,最好设置removedOnCompletion = NO)
•
•kCAFillModeRemoved 这个是默认值,也就是说当动画开始前和动画结束后,动画对layer都没有影响,动画结束后,layer会恢复到之前的状态
•kCAFillModeForwards 当动画结束后,layer会一直保持着动画最后的状态
•kCAFillModeBackwards 在动画开始前,只需要将动画加入了一个layer,layer便立即进入动画的初始状态并等待动画开始。
•kCAFillModeBoth 这个其实就是上面两个的合成,动画加入之后在开始之前,layer便处于动画初始状态,动画结束后layer保持动画最后的状态
CAAnimation——速度控制函数
1.kCAMediaTimingFunctionLinear(线性):匀速
2.kCAMediaTimingFunctionEaseIn(渐进):动画缓慢进入,然后加速离开
3.kCAMediaTimingFunctionEaseOut(渐出):动画全速进入,然后减速的到达目的地
4.kCAMediaTimingFunctionEaseInEaseOut(渐进渐出):动画缓慢的进入,中间加速,然后减速的到达目的地。这个是默认的动画行为。
CAAnimation——动画代理方法
@interface NSObject (CAAnimationDelegate)
/* Called when the animation begins its active duration. */
- (void)animationDidStart:(CAAnimation *)anim;
/* Called when the animation either completes its active duration or
* is removed from the object it is attached to (i.e. the layer). 'flag'
* is true if the animation reached the end of its active duration
* without being removed. */
- (void)animationDidStop:(CAAnimation *)anim finished:(BOOL)flag;
@end
CAPropertyAnimation
•是CAAnimation的子类,也是个抽象类,要想创建动画对象,应该使用它的两个子类:
–CABasicAnimation
–CAKeyframeAnimation
•基本动画,是CAPropertyAnimation的子类
•
•属性说明:
–fromValue:keyPath属性的初始值
–toValue:keyPath属性的结束值
–byValue:keyPath属性的变化值(使用较少)
•
•动画过程说明:
–随着动画的进行,在长度为duration的持续时间内,keyPath相应属性的值从fromValue渐渐地变为toValue
–keyPath内容是CALayer的可动画Animatable属性
如果fillMode=kCAFillModeForwards同时removedOnComletion=NO,那么在动画执行完毕后,图层会保持显示动画执行后的状态。但在实质上,图层的属性值还是动画执行前的初始值,并没有真正被改变
•关键帧动画,也是CAPropertyAnimation的子类,与CABasicAnimation的区别是:
–CABasicAnimation只能从一个数值(fromValue)变到另一个数值(toValue),而CAKeyframeAnimation会使用一个NSArray保存这些数值
–
•属性说明:
–values:上述的NSArray对象。里面的元素称为“关键帧”(keyframe)。动画对象会在指定的时间(duration)内,依次显示values数组中的每一个关键帧
–path:可以设置一个CGPathRef、CGMutablePathRef,让图层按照路径轨迹移动。path只对CALayer的anchorPoint和position起作用。如果设置了path,那么values将被忽略
–keyTimes:可以为对应的关键帧指定对应的时间点,其取值范围为0到1.0,keyTimes中的每一个时间值都对应values中的每一帧。如果没有设置keyTimes,各个关键帧的时间是平分的
•
•CABasicAnimation可看做是只有2个关键帧的CAKeyframeAnimation
CAAnimationGroup——动画组
•动画组,是CAAnimation的子类,可以保存一组动画对象,将CAAnimationGroup对象加入层后,组中所有动画对象可以同时并发运行
•
•属性说明:
–animations:用来保存一组动画对象的NSArray
–默认情况下,一组动画对象是同时运行的,也可以通过设置动画对象的beginTime属性来更改动画的开始时间
转场动画——CATransition
•CATransition是CAAnimation的子类,用于做转场动画,能够为层提供移出屏幕和移入屏幕的动画效果。iOS比Mac OS X的转场动画效果少一点
•
•UINavigationController就是通过CATransition实现了将控制器的视图推入屏幕的动画效果
•
•动画属性:
–type:动画过渡类型
–subtype:动画过渡方向
–startProgress:动画起点(在整体动画的百分比)
–endProgress:动画终点(在整体动画的百分比)
最新文章
- javascript严格模式
- 探究Repository模式的两种写法与疑惑
- 关于antlr包删除问题
- [OSG][转]osg格式文件
- Android 点击文字实现跳转
- android asyncTask 详解
- allegro
- PHP Sessions子系统会话固定漏洞
- cf202-div 1-B - Apple Tree:搜索,数论,树的遍历
- Geodatabase - 删除要素
- 集群通信组件Tribes之如何维护集群成员信息
- webstorm-快捷键大全
- UE4 PostProcessVolume笔记
- python基础16_闭包_装饰器
- jenkins上gradle打包
- Beanstalkd消息队列 -- php类Pheanstalk使用
- AI 信息论
- 2. springboot启动报错:Field userMapper in com.service.UserService required a bean of type &#39;com.dao.UserMapper&#39; that could not be found.
- Hadoop生态圈-Azkaban部署实战
- 破产姐妹第六季/全集2 Broke Girls迅雷下载