2010-11-21 4 views
1

ホイールスタイルのメニューを作って、ホイール(UIImageView)を回転させてさまざまなオプションを見ることができます。ホイールの上半分には選択インジケータもあります。ユーザーは、UIPickerViewを使用しているときと同様に、ホイールの周りの希望のオプションと選択インジケータの下の位置をドラッグすることで、特定のオプションを選択できます。ホイールスタイルのiPhoneメニュー

SOの投稿に続いてiPhone - How to build a roulette like wheel?私は、ユーザのタッチを追跡し、それに従ってホイールを回転させるホイールを実装することができました。しかし、私は2つの追加機能が必要になります。ユーザーがホイールにスワイプを行うことができますし、それがダウン/減速を遅く周りと優雅に回転するように

  1. は、ビットの「ホイールにホイールのように、慣性スクロールを実装します幸運 "のゲームショー。

  2. 車輪が減速して完全に停止すると、自動的に停止するので、オプションインジケータ(UIPickerViewなど)の下に1つのオプションが表示され、2つのオプション選択インジケータの下の半分。

これらの機能を実装するにはどうすればよいかわかりません。ご援助いただければ幸いです。

+0

これはどのようにして終了しましたか? :) – rkj

答えて

2

開始点として、ユーザーがホイールをどれだけスクロールしたかを把握しておくとよいでしょう。ユーザがホイールをタッチ開始すると、現在の時間と角度とそれらの値を更新し、各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に何かを追加して、ユーザーがホイールに触れたときに基本的にこれらのタイマーとアニメーションをすべて終了するようにしてください。そうすれば、その下にアニメートされません。

私はそれが最も洗練された解決策であるかどうかはわかりませんが、問題を解決しようとしていた場合はどこから始めるのですか。がんばろう!

+0

ありがとうatticus。これは私に考えさせる良い情報を与えてくれました。 – Skoota

関連する問題