使用自定义函数对值进行插值非常简单。但这是不好的做法吗?我应该(或者另外)使用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 :(得分:1)
您的方法为动画添加了300个关键帧,以便线性地插入Core Animation。有两个原因可能不比使用更少的非线性插值关键帧更难以得到相同的结果:(1)要发送给CA的数据越多,即存储和读取每个动画帧的数据越多; (2)如果你想减慢动画速度以便从中渲染超过300帧,线性插值伪像可能会变得可见。
如果你只有一个3s动画,那么这些原因可能都不重要,但是如果您有100个10秒的动画,所有动画一次运行,您可能会看到比使用更少的关键帧更差的性能。