このジェスチャーについて話しているとしましょう。
ソース。
ワンタッチ回転ジェスチャ認識エンジンを構築します。ジェスチャ レコグナイザを正しく構築した後は、回転を見て、回転パッドをどうするかを確認できます。
シングルタッチ回転ジェスチャ レコグナイザーを作成する際に考慮すべき点がいくつかあります。を見るとUIRotationGestureRecognizer
、2 本の指で支えられた 2 つのタッチ間の接続を使用して現在の角度を取得し、その角度を以前のタッチ変更イベントから取得した前の角度と比較してデルタを確認します。
現在の角度の測定
線を形成するには 2 点が必要で、角度を知るには線が必要です。ワンタッチで作業している場合は、アンカー ポイントが必要です。アンカー ポイントをジェスチャ レコグナイザに送信する方法は多数ありますが、カスタム クラスを作成する可能性が高いため、委任を使用してください。
回転数の累積
角度をメモして、タッチの変更中にメッセージを送信するだけでうまくいく場合があります。ただし、ヒステリシスを実装したい場合 (たとえば、このロータリー ダイヤルは時計回りに 1 回だけ回転し、その後、締め付けられます)、時計回りと反時計回りの両方の回転数を累積する必要があります。
幸いなことに、a) タッチ イベントが頻繁にドロップされることはなく、b) 現在の角度と過去の角度を単純に比較して、象限の境界を越えているかどうかを確認するだけで十分であると想定できます。
例えば:
- タッチが左上の象限から右上の象限に移動した場合、回転カウントに 1 を追加します。
- タッチが右上の象限から左上の象限に移動した場合、回転数から 1 を引きます。
(うん、これは実際に動作します。)
正確な累積回転を放出する
回転情報をまったく同じように出力したい場合UIRotationGestureRecognizer
は、追跡するものが 4 つあります。
- 開始角度:アンカー ポイントから開始タッチまでの接続と、アンカー ポイントから固定基準点までの接続の間の角度。
- 現在の角度:アンカー ポイントから現在のタッチへの接続と、アンカー ポイントから固定基準点への接続の間の角度。
- Rotation Count:現在の角度の現在の値を最後の値と継続的に比較することによって得られる時計回りの回転数 (前のセクションで説明したように)。タッチが反時計回りに移動している場合、このカウントは負になります。
Rotation Count * 2_PI + (Current Angle - Starting Angle)
ローテーションとして提供します。