0

以前の投稿 (こちら) で詳しく説明したように、最初の角度から始まり、最後の角度に移動するアニメーションを作成しています。CADisplayLinkユーザー入力中にアニメーションをできるだけ速く実行する必要があるため、このアニメーションに を使用することにしましCALayerCAKeyframeAnimation

CADisplayLinkを呼び出す を実装した後setNeedsDisplay、アニメーションは機能しますが、ある角度から次の角度への連続的な流れを作成するのではなく、 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のアニメーションは3.0 秒かかります。を計算して完全な円 (ラジアン) を等しいセグメントに分割し、できればフレームごとにこれらの角度の 1 つをアニメートしたいのですが、どうにかして考慮に入れる必要があります。initialAngleendAngle2*M_PI2*M_PI / kNumAnglesInAnimationkDrawDurationelapsedTime

これを修正するのを手伝ってくれてありがとう!

4

1 に答える 1

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

「animationProgress」を追跡しないでください。アニメーションを正しくするために必要なのは、経過時間だけです。したがって、それを削除して使用します:

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

于 2013-06-24T16:59:46.467 に答える