2013-12-09 15 views
0

使用自定义函数对值进行插值非常简单。但这是不好的做法?我应该(或另外)使用keyTimes,timingFunctionstimingFunction来解释框架的动画曲线吗?使用自定义动画曲线时,我真的不明白为什么我应该使用这些属性。我想要这样做。为什么在CAKeyframeAnimation上使用`keyTimes`,`timingFunctions`或`timingFunction`?

这工作得很好。正如预期的那样是动画的看法位置与自定义立方渐出动画曲线:

CAKeyframeAnimation *anim = [CAKeyframeAnimation animationWithKeyPath:@"position.x"]; 
anim.duration = 5; 
NSUInteger numberOfFrames = anim.duration * 60; 

NSMutableArray *values = [NSMutableArray new]; 

for (int i = 0; i < numberOfFrames; i++) 
{ 
    CGFloat linearProgress = (double) i/(double) numberOfFrames; 
    CGPoint position = view.layer.position; 
    position.x = 10 + (300 * CubicEaseOut(linearProgress)); 
    [values addObject:[NSValue valueWithCGPoint:position]]; 
} 

anim.values = values; 

[view.layer addAnimation:anim forKey:@"position"]; 
+0

我想如果你不计算所有的中间值,并希望'CAAnimation'类来处理插值,那么它有道理吗? – hfossli

回答

1

你的方法增加300个关键帧动画,对核心动画插值,线性。有两个原因可能并不比使用非线性插值的更少的关键帧来获得相同的结果更糟糕:(1)要发送给CA的更多数据,即存储和读取每个动画帧的更多数据; (2)如果您想减慢动画速度,以便渲染超过300帧,线性插值伪影可能会变得可见。

如果您只有一个3s动画,可能这两个原因都不重要,但例如,如果您一次运行100个10的动画,则与使用较少的关键帧相比,您的性能可能会更差。

+0

哇。这真的帮助我理解。 – hfossli

相关问题