開始点として、ユーザーがホイールをどれだけスクロールしたかを把握しておくとよいでしょう。ユーザがホイールをタッチ開始すると、現在の時間と角度とそれらの値を更新し、各touchMovedに続い
NSDate *lastDate = [NSDate date];
double lastAngle = //however you're determining the wheel angle
と日付と現在の角度を保存します。あなたが最終的にtouchEndedに到達すると、最後に保存された日時からの時間間隔を取得し、車輪の回転速度を決定するためにそれを使用:
NSDate *currentDate = [NSDate date];
NSTimeInterval elapsedTime = [currentDate timeIntervalSinceDate];
double rotationalSpeed = (currentAngle - lastAngle)/elapsedTime;
は今、あなたはホイールがユーザーのもとで回転している角度/秒を持っています指。目標は同じスピードを維持することです。たぶん秒ごとに発生するタイマーを起動し、ホイールをrotateSpeed * timeElapsedSinceLastTimerFiredに回転させるだけです。上記のホイールアングルの更新間隔をどのようにトラッキングしたかと同様に、タイマー起動メソッドが呼び出された実際の日付を保存して最後を計算します。あるいは、アングルの更新間隔を長くし、回転をアニメーション化することもできます。短編アニメーションが完成したら、別のアニメーションを開始するだけです。
これらは、ユーザーの最後の速度でホイールを無期限に回転させ続けるでしょう。それをテーパするには、0.1秒ごとに発生するタイマーを設定して、それがゼロ以下になるまでrotateSpeedを減らしてください。さらに、ユーザーがホイールを離れる日を保存し、ユーザーが対話を停止してからの経過時間に応じてrotateSpeedの一部を適用するのはどうでしょう。何かのように:
ホイールを止めるときは、最も近いスナップポイントが何であるかを特定し、その位置にホイールをアニメートします。 touchesBeganに何かを追加して、ユーザーがホイールに触れたときに基本的にこれらのタイマーとアニメーションをすべて終了するようにしてください。そうすれば、その下にアニメートされません。
私はそれが最も洗練された解決策であるかどうかはわかりませんが、問題を解決しようとしていた場合はどこから始めるのですか。がんばろう!
これはどのようにして終了しましたか? :) – rkj