2017-06-28 9 views
0

私はrequireGestureRecognizerToFail機能を使用してシングルタップとダブルタップを区別できることを知っていますが、私は小さな問題に直面しています。私のコードは以下の通りである:私は、ファイルをダブルタップ(アクション1)を開くとiOSは最初のオープニングでシングルタップとダブルタップを区別する

- (IBAction)singleTap:(UITapGestureRecognizer *)sender { 
    NSLOGD_METADATAONLY(); 
    hideNavigationBar(); 
    hideStatusBar(); 
    [sender requireGestureRecognizerToFail:self.doubleTapRecognizer]; 
} 

- (IBAction)doubleTap:(UITapGestureRecognizer *)sender { 
    NSLOGD_METADATAONLY(); 
    //TODO 
} 

、シングルタップ(結果1)が最初に呼び出され、その後、ダブルタップ(結果2)が呼び出されます。

ファイルを開いてシングルタップ(action3)をダブルタップ(action4)した場合、action4の結果はうまくいきます。シングルタップは呼び出されず、ダブルタップだけが呼び出されます。私はaction3では関数requireGestureRecognizerToFailが呼ばれているからだと思います。

私の質問は、どうすればresult1を呼び出すことができ、result1を呼び出さないのですか?

答えて

0

ViewDidLoadに次の行を書きます。
[singleTap requireGestureRecognizerToFail:doubleTap]; [singleTapRecognizer requireGestureRecognizerToFail: doubleTapRecognizer]

+0

試しましたが、動作しません。 – wangshaoping

+0

申し訳ありませんが私は間違いを犯しました。私はパンのジェスチャーを1回のジェスチャーとして間違えてしまいました。私はこの答えを受け入れるだろう。 – wangshaoping

+0

ハッピーコーディング.... –

0

更新あなたのコードは、作成UITapGestureRecognizer

例:あなたはジェスチャー認識のためのrequireGestureRecognizerToFail:を設定すると

// single tap  
    UITapGestureRecognizer *singleTapRecognizer = [[UITapGestureRecognizer alloc] initWithTarget: tableViewController action: @selector(handleSingleTapOnView:)];         
    [singleTapRecognizer setNumberOfTouchesRequired:1]; 
    [singleTapRecognizer requireGestureRecognizerToFail:doubleTapRecognizer]; 
    [view addGestureRecognizer: singleTapRecognizer]; 

    // double tap 
    UITapGestureRecognizer *doubleTapRecognizer = [[UITapGestureRecognizer alloc] initWithTarget: tableViewController action: @selector (handleDoubleTapOnView:)];   
    [doubleTapRecognizer setNumberOfTouchesRequired:2];   
    [view addGestureRecognizer: doubleTapRecognizer]; 

すると、あなたはそれだけであれば、ジェスチャーを認識すべきであることを言っています他のジェスチャー認識はしませんでした。

+0

私はxibファイルでジェスチャーを作成しますが、どこに関数を追加すればよいですか? – wangshaoping

+0

次にそれらのためにIBOutletを作成します –

+0

はい私は作成しましたが、viewDidLoadでsingleTapRecognizer requireGestureRecognizerToFail:doubleTapRecognizerを追加しますが、このセットは機能しません。 – wangshaoping

0

クラスをUIGestureRecognizerDelegateに拡張します。

class ViewController: UIViewController, UIGestureRecognizerDelegate { 

次に、ビューコントローラをジェスチャ認識ツールの代理人として割り当てます。 shouldRequireFailureOf

tapGesture .delegate = self; 
doubleTapGesture .delegate = self; 

実装は、他のジェスチャー認識が明示的に失敗した状態に達した後まで認識されてから1つのジェスチャーを防ぐことができます。

ダブルタップが失敗した後でのみ、タップを認識する必要があります。これは、タッチシーケンスにタップが1つしか含まれていない場合に発生します。 これは、以下を実装することで実現できます。

func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, 
        shouldRequireFailureOf otherGestureRecognizer: UIGestureRecognizer) -> Bool { 
// Don't recognize a single tap until a double-tap fails. 
     if gestureRecognizer == self.tapGesture && 
      otherGestureRecognizer == self.doubleTapGesture { 
      return true 
     } 
    return false 
    } 

希望します。ハッピーコーディング!

+0

試しましたが、依然として同じ結果です。 – wangshaoping

+0

このメソッドをどこでも呼び出す必要はありません。このメソッドは、UIGestureRecognizerDelegate check [ここ](https://developer.apple.com/documentation/uikit/uigesturerecognizerdelegate)のプロトコルメソッドです。 Uは、ジェスチャ認識機能のデリゲートとしてビューコントローラを設定するだけです。 – luckyShubhra

+0

私は私のansを更新しました。ビューコントローラをジェスチャ認識プログラムの代理人として割り当てるようにしてください。 – luckyShubhra

関連する問題