Jumpy CADisplayLink动画

时间:2013-06-24 15:57:57

标签: ios caanimation cakeyframeanimation cadisplaylink

正如前一篇文章(Here)中所详述的那样,我正在创建一个以初始角度开始并移动到结束角度的动画。我已决定将CADisplayLink用于此动画,因为动画需要在用户输入期间尽可能快地运行,因此带有CALayer的{​​{1}}似乎太慢了实现这一目标。

在实现调用CAKeyframeAnimation的{​​{1}}之后,我确实让动画工作了,但它看起来非常糟糕,因为它将endAngle和initialAngle之间的差异分成了大量可见的角度块,而不是创建从一个角度到下一个角度的连续流动。这是我目前的代码:

CADisplayLink

此外,setNeedsDisplay定义为CGFloat newAngleToAnimate = animationProgress + ((endAngle-initialAngle)/kDrawDuration)*elapsedTime; // Use newAngleToAnimate to draw in drawInContext animationProgress = newAngleToAnimate; // Update the progress for the next frame. ,因此我希望从kDrawDuration3.0f的动画需要3.0秒。我通过计算initialAngle将整圆(endAngle弧度)分成相等的段,最好我想在每帧中为这些角度中的一个设置动画,但不知怎的,我仍然需要2*M_PI并考虑2*M_PI / kNumAnglesInAnimation,我只是没有看到如何实现。

感谢您解决此问题的任何帮助!

1 个答案:

答案 0 :(得分:1)

CGFloat newAngleToAnimate = animationProgress + ((endAngle-initialAngle)/kDrawDuration)*elapsedTime;

不要跟踪“animationProgress”。您只需要经过时间即可获得动画。所以只需删除它并使用:

CGFloat newAngleToAnimate =((endAngle-initialAngle)/ kDrawDuration)* elapsedTime;