ボリューム コントロールのような丸いボタンを実装しようとしています。現在、Gesture Recognizer でスワイプを検出できます。ボタンの円形ジェスチャ (時計回りと反時計回り) を検出するにはどうすればよいですか? ありがとう!
4 に答える
ワンタッチ ジェスチャ (円形のスライダーなど) または 2 タッチ ジェスチャ (実際のノブをつかんで回すなど) をお探しですか? 後者の場合は、 をご覧くださいUIRotationGestureRecognizer
。
前者の場合、あなたはほとんど独りです。ソリューションを独自のカスタム ジェスチャ レコグナイザーとして実装することは確かに可能です。これは Apple によって期待されており、開始するためのドキュメントがいくつかあります(実際に動作する例はあまり見たことがありませんが)。UIGestureRecognizer を正しくサブクラス化する方法も参照してください。
一般的なアプローチとして、ジェスチャの領域をドーナツ形状と考えます。つまり、中心c、内側半径r1、外側半径r2を持つゾーンです。ユーザーがタッチダウンすると、ピタゴラスの定理を使用してcから距離を計算し、好みの三角関数で角度を計算できます。これにより、タッチがゾーン内にあるかどうかを判断できます。ユーザーがドラッグすると、角度に基づいてコントロール値を更新できます。ある時点で、タッチアップするか、ゾーンの外にドラッグすると、ジェスチャが終了します。タッチがr1のかなり内側またはr2の外側にあるようにすることをお勧めします。指は不正確なツールです。
解決策を見つけることができず、@sixten の回答からの論理的なインスピレーションによって、私は行って何か便利なものを作成しました。それは防弾ではありませんが、今のところ必要なことをしているようです。
誰でも、フォーク、クローン、使用、改善してください。オープンソースです。私のレポリンクは次のとおりです。
https://bitbucket.org/danielphillips/dpcirculargesturerecognizer
最善の方法は、カスタムジェスチャ認識機能を実装することです。Discreet Gesture(完全な円が検出されるとイベント処理メソッドが呼び出される)またはContinues Gesture(円形パス上で指を動かすたびにイベント処理メソッドが呼び出される)を検出するかどうかはわかりません。
おそらく、ユーザーは完全な円を描くことができない可能性があり、@SixtenOttoが提供するソリューションが適しています。
独自のジェスチャ認識エンジンを作成してみましたか? ドキュメントに詳細な手順があります。