UIGestureRecognizer クラス リファレンスを読むと、API がタッチとジェスチャ コントロールの優先順位付けを処理し、ジェスチャレコグナイザtouchesBegan
が最初に失敗しない限り、ビューでメソッドと関連するメソッドが呼び出されないようにすることが暗示されます。
ウィンドウは、ジェスチャ レコグナイザーに接続されているヒット テスト済みビューにタッチ イベントを配信する前に、ジェスチャ レコグナイザーに配信します。一般に、ジェスチャ レコグナイザーがマルチタッチ シーケンス内の一連のタッチを分析し、そのジェスチャを認識しない場合、ビューは完全なタッチを受け取ります。ジェスチャ レコグナイザがそのジェスチャを認識すると、ビューの残りのタッチはキャンセルされます。
ビューにスワイプ ジェスチャを追加しましたが、機能しています。ロギングを介して、1回のスワイプを行うと、メソッドはそのように報告します。ただし、私のtouchesBegan
メソッドは、予想どおりメッセージも受信しているにもかかわらず、ログを介して報告しています。touchesCancelled
touchesBegan
ジェスチャが認識されて、呼び出されないようにしたり、呼び出されないようにしたいと思ってtouchesMoved
います。
私の質問は、ジェスチャ認識エンジンが実際にその状態に基づいてタッチを遅らせるために、追加のセットアップが必要ですか? ドキュメントは、必要に応じて他に何も提案していません。
私のセットアップは簡単です:
swipeUpTwoFinger=[[[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(doubleSwipeUp:)]autorelease];
swipeUpTwoFinger.direction=UISwipeGestureRecognizerDirectionUp;
swipeUpTwoFinger.numberOfTouchesRequired=2;
[self addGestureRecognizer:swipeUpTwoFinger];
また、このテストを試して、処理前に認識エンジンが失敗したことを確認しました(上記のドキュメントの内容を信じる場合、touchesBegan
このテストは必要ありませんtouchesBegan
) が、このテストの後もログ行を処理しています:
if (swipeUpTwoFinger.state==UIGestureRecognizerStateFailed)