簡體   English   中英

Jumpy CADisplayLink動畫

[英]Jumpy CADisplayLink Animation

正如上一篇文章( Here )中詳細介紹的那樣,我正在創建一個動畫,該動畫從初始角度開始並移動到結束角度。 我決定對此動畫使用CADisplayLink ,因為動畫需要在用戶輸入期間盡可能快地運行,因此帶有CAKeyframeAnimationCALayer似乎太慢而無法實現。

在實現了調用setNeedsDisplayCADisplayLink之后,我確實使動畫工作了,但是它看起來確實很糟糕,因為它將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 ,所以我希望動畫從initialAngleendAngle花費3.0秒。 我通過計算2*M_PI / kNumAnglesInAnimation將整個圓( 2*M_PI弧度)分成相等的段,並且最好是每幀為其中一個角度設置動畫,但是我仍然必須考慮kDrawDurationelapsedTime ,我只是不知道如何實現。

感謝您解決此問題的任何幫助!

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

不要跟蹤“ animationProgress”。 您的elapsedTime是使動畫正確無誤所需的全部時間。 因此,只需將其刪除並使用:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM