正如前一篇文章(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.
,因此我希望从kDrawDuration
到3.0f
的动画需要3.0秒。我通过计算initialAngle
将整圆(endAngle
弧度)分成相等的段,最好我想在每帧中为这些角度中的一个设置动画,但不知怎的,我仍然需要2*M_PI
并考虑2*M_PI / kNumAnglesInAnimation
,我只是没有看到如何实现。
感谢您解决此问题的任何帮助!
答案 0 :(得分:1)
CGFloat newAngleToAnimate = animationProgress + ((endAngle-initialAngle)/kDrawDuration)*elapsedTime;
不要跟踪“animationProgress”。您只需要经过时间即可获得动画。所以只需删除它并使用:
CGFloat newAngleToAnimate =((endAngle-initialAngle)/ kDrawDuration)* elapsedTime;