6

タップをキャプチャするために使用UIGestureRecognizerしています...特定のタップを処理したくない場合、マニュアルには次のように記載されています。

「ジェスチャ レコグナイザーがジェスチャの一部ではないと判断したタッチを検出した場合、そのタッチをビューに直接渡すことができます。これを行うために、ジェスチャ レコグナイザーはそれ自体で ignoreTouch:forEvent: を呼び出し、タッチ オブジェクトを渡します。」

残念ながら、これを使用した例は見つかりません。これはUIGestureRecognizerハンドラーの私のコードです:

- (void)singleFingerTap:(UITapGestureRecognizer*)gesture {

    CGPoint pt = [gesture locationInView:self.view];
    CGRect dataRect = CGRectMake(117.0,416.0,670.0,1450);
    CGPoint dataPoint = CGPointMake(pt.x, pt.y);

    //  check to see if point is within the rectangle
    if(!CGRectContainsPoint(dataRect, dataPoint))  {
        NSLog(@"\n\nNOT within subViewData (x: %f  y: %f",dataPoint.x, dataPoint.y);
        [self.view ignoreTouch:gesture];
    }
    else  {
        NSLog(@"\n\nIS within subViewData(x: %f  y: %f",dataPoint.x, dataPoint.y);
    }
}

エラーが発生し続けます:

「UIView」の目に見える @interface はセレクター「ignoreTouch:」を宣言しません

アプリのドキュメントを読みましたが、引用したものがあります。この質問に答えるSOまたはGoogleには何もありません。ヘルプは大歓迎です(いつものように)。:D

4

2 に答える 2

9

認識エンジンがタッチをまったく受け取らないようにしたい場合UIGestureRecognizerDelegateは、次の方法gestureRecognizer:shouldReceiveTouch:を使用できます。

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch {
    if (/* some logic here*/) {
        return NO;
    }

    return YES;
}

複数のレコグナイザーを使用している場合はgestureRecognizer、テスト ロジックを実行する前に、タップ レコグナイザーであるかどうかを確認する必要があります。


ignoreTouch:forEvent:すべてのタッチを処理する必要がある場合は、両方の引数で呼び出す必要があるようです:

    [recognizer ignoreTouch:someTouch withEvent:someEvent];

このメソッドは、サブクラスでのみ使用することを意図しているようです。そのため、タップの有効性を判断するための独自のカスタム ロジックを実装するUIGestureRecognizerのサブクラスを作成することをお勧めします。UITapGestureRecognizer

于 2013-04-19T18:26:20.967 に答える
1

プロセスとはどういう意味ですか?タッチはそこにあり、それをどうするかはあなた次第です。何もしたくない場合は、何もしないでください。そうでない場合は、何かをしてください。無視したいという考えはあなたの論理次第です...

私はこれについてこの質問に出くわしましたが、質問を間違った用語で入力したか、何か他のものが必要です: UIGestureRecognizer はタッチイベントを処理するためにサブビューをブロックします

編集1:

別のUIView用なので、タップを無視したいということです

次に、タップジェスチャーを間違って追加していUIViewます。

于 2013-04-19T18:28:55.383 に答える