18

ユーザーがビューを 1 回タップすると、特定のメソッドを 1 つ実行する必要があります。ユーザーがダブルタップすると、別の方法を実行する必要があります。

問題は、ダブルタップがシングルタップをトリガーし、ロジックにバグが発生することです。ポイントを追跡する必要があるため、UIGestureRecognizer を使用できません。

私はいくつかのブール値を試しますが、チャンスはありません。cancel/perfomSelector-delay テクニックも試しましたが、うまくいきません (他のフォーラムの他の人がうまくいくと言っていたので、奇妙なことに、シミュレーターのタッチ検出が異なるのでしょうか?)

ユーザーがボードピースの位置を設定 (ドラッグ、回転) できるようにしようとしていますが、ピースの交差、ボード領域へのクリップなどに注意する必要があるため、単純なブール値では問題が解決されません。

前もって感謝します!

4

4 に答える 4

45

これをチェックしてください、あなたが探しているものは正しいようです:

コードの下で、UITapGestureRecognizerを使用してシングルタップとダブルタップを処理します。コードは、ダブルタップイベントを取得した場合にシングルタップイベントを発生させないように設計されています。秘訣は、requireGestureRecognizerToFailを使用して、シングルタップジェスチャがダブルタップイベントが失敗するのを待ってから起動するように要求することです。したがって、ユーザーが画面をタップすると、シングルタップジェスチャレコグナイザーはダブルタップジェスチャレコグナイザーまでイベントを発生させません。ダブルタップジェスチャレコグナイザーがイベントを認識すると、ダブルタブイベントが発生し、シングルタップイベントがスキップされます。それ以外の場合は、シングルタップイベントが発生します。

    UITapGestureRecognizer *doubleTapGestureRecognizer = [[UITapGestureRecognizer alloc]
                            initWithTarget:self action:@selector(handleDoubleTap:)];
    doubleTapGestureRecognizer.numberOfTapsRequired = 2;

    //tapGestureRecognizer.delegate = self;
    [self addGestureRecognizer:doubleTapGestureRecognizer];

    //
    UITapGestureRecognizer *singleTapGestureRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleSingleTap:)];
    singleTapGestureRecognizer.numberOfTapsRequired = 1;

    [singleTapGestureRecognizer requireGestureRecognizerToFail: doubleTapGestureRecognizer];
    //tapGestureRecognizer.delegate = self;
    [self addGestureRecognizer:singleTapGestureRecognizer];

「ポイントを追跡する必要がある」とはどういう意味か正確にはわからないかもしれませんが、ジェスチャレコグナイザーを使用してこれを行うことに問題はありません。

于 2011-07-05T18:58:10.040 に答える
4

Swift 3 ソリューション:

doubleTap = UITapGestureRecognizer(target: self, action:#selector(self.doubleTapAction(_:)))
doubleTap.numberOfTapsRequired = 2


singleTap = UITapGestureRecognizer(target: self, action:#selector(self.singleTapAction(_:)))
singleTap.numberOfTapsRequired = 1

singleTap.require(toFail: doubleTap)

self.view.addGestureRecognizer(doubletap)
self.view.addGestureRecognizer(singleTap)

コード行singleTap.require(toFail: doubleTap) では、シングル タップを強制的に待機させ、タップがダブル タップではないことを確認します。つまり、ダブルタップ イベントが失敗したことを確認するよう求めているため、シングル タップとして結論付けられます。

于 2016-10-27T13:08:02.790 に答える
1

スウィフトソリューション:

    doubleTapSmall1.numberOfTapsRequired = 2
    doubleTapSmall1.addTarget(self, action: "doubleTapPic1")
    smallProfilePic1.addGestureRecognizer(doubleTapSmall1)

    singleTapSmall1.numberOfTapsRequired = 1
    singleTapSmall1.addTarget(self, action: "singleTapPic1")
    singleTapSmall1.requireGestureRecognizerToFail(doubleTapSmall1)
    smallProfilePic1.addGestureRecognizer(singleTapSmall1)
于 2015-09-10T10:12:53.557 に答える