2012-04-14 4 views
1

に画面領域を重複にジェスチャーを検出する私のアプリは数UIViews、BCD、並んでおり、全てがエンベロープのUIView Aに含ま:下の図に示されるようにiOS5を

enter image description here

B,CおよびDのそれぞれにUIPinchGestureRecognizerがあります。私がやりたいことは、エリア全体で違うジェスチャーを認識することです(他のジェスチャーレコグナイザの動作を妨げることなく)。A

最適な方法は何ですか?私はiOS5 +をターゲットにしており、後方互換性は必要ありません。 のジェスチャーレコグナイザは、ピンチを検出したいが> 2本の指が関わっているので、おそらくカスタムジェスチャレコグナイザである必要があります。

思想:

Aのためのジェスチャー認識をインストールすると、うまく動作しない場合は、それがUIResponder docs注意点としてtouchesBeganなどを使って、それを古い方法を行うことが可能であるかもしれない、あなたはサブクラスを持つことができますUIViewの場合は、接触に興味がない場合はレスポンダチェーンで渡すように[super touchesBegan:touches withEvent:event]と呼んでください。

答えて

0

私が認識したいジェスチャーについては、少なくともジェスチャーレコグナイザを簡単な方法で追加するだけです。もっと複雑になると思った。

0

通常どおり、GestureRecognizeをAに追加します。

これで、タッチしたものをヒットテストする必要があります。

まず、アイテムのZ-インデックスをテストする必要があります。たとえば、Bをタッチすると、影響を受けるすべての項目(この場合はA &B)に対して関数がループ/ヒットテストします。 関数がA & B(Bを超えるB)ヒットテストを検出した後、 z-indexを確認する必要があります。たとえば、Bのz-インデックスが2の場合、A-Zインデックスは1です。これで、B-インデックスはZ-インデックスが高く、これがオントップであるため、ユーザーがタッチしようとしていたものです。

対象を特定した後(B)、GestureRecognizeを実行する前に、GestureRecognizeを一時的に無効にして、重複するGestureRecognizes間の競合を解消する必要があります。 Bタッチが完了/終了したら、Aのジェスチャー認識を有効に戻します。

+0

あなたの答えをありがとう。コンポーネント/コードのテストでヒットしますか?どのテクニックを使う? (touchesBeganなど)? – occulus

+0

私はコードを投稿することはできませんが、私は説明しようとします。 両方のタッチを初期タッチ識別として使用し、ジェスチャーを識別されたコンポーネント内部のタッチの2次ハンドラとして認識します。 初期タッチ時に画面全体をテストします。あなたのすべての要素をループし、それらのどれがタッチされた座標内にあるのかを調べます。したがって、Bに触れた場合、ループはBとAの両方が接触座標内にあるのでループを見つけるはずです。次に、競合するGestureRecognizesを無効/有効にして、ジェスチャが完了した後でそれらを有効に戻します。 –

関連する問題