[英]Jumpy CADisplayLink Animation
正如上一篇文章( Here )中詳細介紹的那樣,我正在創建一個動畫,該動畫從初始角度開始並移動到結束角度。 我決定對此動畫使用CADisplayLink
,因為動畫需要在用戶輸入期間盡可能快地運行,因此帶有CAKeyframeAnimation
的CALayer
似乎太慢而無法實現。
在實現了調用setNeedsDisplay
的CADisplayLink
之后,我確實使動畫工作了,但是它看起來確實很糟糕,因為它將endAngle和initialAngle之間的差異分成了明顯可見的角度塊,而不是創建從一個角度到另一個角度的連續流動。 這是我當前的代碼:
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
,所以我希望動畫從initialAngle
到endAngle
花費3.0秒。 我通過計算2*M_PI / kNumAnglesInAnimation
將整個圓( 2*M_PI
弧度)分成相等的段,並且最好是每幀為其中一個角度設置動畫,但是我仍然必須考慮kDrawDuration
和elapsedTime
,我只是不知道如何實現。
感謝您解決此問題的任何幫助!
CGFloat newAngleToAnimate = animationProgress + ((endAngle-initialAngle)/kDrawDuration)*elapsedTime;
不要跟蹤“ animationProgress”。 您的elapsedTime是使動畫正確無誤所需的全部時間。 因此,只需將其刪除並使用:
CGFloat newAngleToAnimate =(((endAngle-initialAngle)/ kDrawDuration)* elapsedTime;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.