动画

iOS Core Animation(八)- 缓冲

2016-12-23  本文已影响35人  莫须有恋
CAMediaTimingFunction
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。

计算帧的持续时间

使用CADisplayLink,由于我们不能够计算出一帧真实的持续时间。我们可以通过每帧开始刷新的时候用CACurrentMediaTIme()记录当前时间,然后和上一帧记录的时间比较。

Run Loop模式

使用CADisplayLink的时候,我们需要指定一个run looprun loop mode,界面更新都需要在主线程执行,对于run loop我们使用主线程的run loop。run loop mode是任务的优先级。

    self.timer = [CADisplayLink displayLinkWithTarget:self
                                             selector:@selector(step:)];
    [self.timer addToRunLoop:[NSRunLoop mainRunLoop]
                     forMode:UITrackingRunLoopMode];
    [self.timer addToRunLoop:[NSRunLoop mainRunLoop]
                     forMode:NSDefaultRunLoopMode];

上一篇:iOS Core Animation(七)

上一篇 下一篇

猜你喜欢

热点阅读