iOS Core Animation(八)- 缓冲
CAMediaTimingFunction
- KCAMediaTimingFunctionLinear 线性,匀速
- KCAMediaTimingFunctionEaseIn 慢慢加速,突然停止
- KCAMediaTimingFunctionEaseOut 全速开始,减速停止
- KCAMediaTimingFunctionEaseInEaseOut 加速开始,减速停止
- KCAMediaTimingFunctionDefault 比KCAMediaTimingFunctionEaseInEaseOut稍慢的速度加速开始,减速停止
UIView动画缓冲
options
参数添加常量
UIViewAnimationOptionCurveEaseInOut
UIViewAnimationOptionCurveEaseIn
UIViewAnimationOptionCurveEaseOut
UIViewAnimationOptionCurveLinear
缓冲和关键帧动画
CAKeyframeAnimation 可以添加
values
,设置关键帧动画,与之对应的timingFunctions
属性可以为每次动画添加不同的计时函数,数组的个数需要时values
数组个数减一,因为它描述的是每一帧之间的动画速度的函数。
自定义缓冲函数
+ (instancetype)functionWithControlPoints:(float)c1x :(float)c1y :(float)c2x :(float)c2y;
- (instancetype)initWithControlPoints:(float)c1x :(float)c1y :(float)c2x :(float)c2y;
自己理解:动画轨迹曲线是相对坐标曲线。上述方法得到的轨迹曲线是以(0,0),(c1x,c1y),(c2x,c2y)(1,1)绘制的三次贝塞尔曲线。
复杂动画曲线 - 基于关键帧的缓冲
values
指定每个关键帧对应的属性变化keyTimes
指定每个关键帧的时间偏移timingFunctions
指定每个关键帧之间的缓冲动画
流程自动化和基于定时器的动画
value = (endValue - startValue) * time + startValue
,原理就是根据时间,依靠函数计算出每个时间点的value。
- 总时间为1s,时间点和value的关系
- 直接使用上述函数是一个匀速的变换过程
- 通过一些函数,将每一帧动画的时间点转换成value对应位置的时间点,从而获取与之对应的value,demo:https://github.com/warrenm/AHEasing
计算帧的持续时间
使用
CADisplayLink
,由于我们不能够计算出一帧真实的持续时间。我们可以通过每帧开始刷新的时候用CACurrentMediaTIme()记录当前时间,然后和上一帧记录的时间比较。
Run Loop模式
使用CADisplayLink的时候,我们需要指定一个
run loop
和run loop mode
,界面更新都需要在主线程执行,对于run loop
我们使用主线程的run loop。run loop mode
是任务的优先级。
-
NSDefaultRunLoopMode
- 标准优先级 -
NSRunLoopCommonModes
- 高优先级,如果动画在一个高频率下运行,则会造成一些别的类似定时器的任务或者类似滑动的其他iOS动画暂停 -
UITrackingRunLoopMode
- 用于UIScrollView
和其他空间的动画 - 我们可以指定多个
run loop mode
,同时使用NSDefaultRunLoopMode
和UITrackingRunLoopMode
,可以使动画不会被滑动打断,也不会被其他UIKit控件动画影响性能
self.timer = [CADisplayLink displayLinkWithTarget:self
selector:@selector(step:)];
[self.timer addToRunLoop:[NSRunLoop mainRunLoop]
forMode:UITrackingRunLoopMode];
[self.timer addToRunLoop:[NSRunLoop mainRunLoop]
forMode:NSDefaultRunLoopMode];
上一篇: nn.LSTM层出来的out和hn的关系
推荐阅读
-
iOS Core Animation(八)- 缓冲
-
iOS动画系列之三:Core Animation
-
iOS Core Animation讲解---CABasicAnimation
-
iOS Core Animation - UIView Animation
-
iOS Core Animation (II)
-
玩转iOS开发:4.《Core Animation》CALayer的视觉效果
-
玩转iOS开发:7.《Core Animation》Implicit Animations
-
【iOS】一个取巧的弹出式动画实现以及后续的iOS动画学习(第一部分:基于CALayer的Core Animation框架)
-
详解iOS的Core Animation框架中的CATransform3D图形变换
-
详解iOS的Core Animation框架中的CATransform3D图形变换