以前の投稿 (こちら) で詳しく説明したように、最初の角度から始まり、最後の角度に移動するアニメーションを作成しています。CADisplayLink
ユーザー入力中にアニメーションをできるだけ速く実行する必要があるため、このアニメーションに を使用することにしましCALayer
たCAKeyframeAnimation
。
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 つをアニメートしたいのですが、どうにかして考慮に入れる必要があります。initialAngle
endAngle
2*M_PI
2*M_PI / kNumAnglesInAnimation
kDrawDuration
elapsedTime
これを修正するのを手伝ってくれてありがとう!