14

たとえば、2 つの異なるジェスチャーが必要なビューがあります。

タップしてアクション A を実行します。ダブルタップしてアクション B を実行します。

問題は UITapGestureRecognizer にあり、最低限必要なタップ数しか設定できません。シングル タップ ジェスチャ レコグナイザーは、ダブル タップ ジェスチャ レコグナイザーがダブル タップを認識する前にタップを認識します。

例:

_tapGestureRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapGestureRecognized:)];
_tapGestureRecognizer.numberOfTouchesRequired = 1;
_tapGestureRecognizer.numberOfTapsRequired = 1;
[self addGestureRecognizer:_tapGestureRecognizer];

_doubleTapGestureRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(doubleTapGestureRecognized:)];
_doubleTapGestureRecognizer.numberOfTouchesRequired = 1;
_doubleTapGestureRecognizer.numberOfTapsRequired = 2;
[self addGestureRecognizer:_doubleTapGestureRecognizer];

ダブルタップを非常に速くしても、シングルタップは常に認識されます。タップジェスチャレコグナイザーがダブルタップジェスチャレコグナイザーが認識するかどうかを待機して確認するように設定するにはどうすればよいですか?

4

4 に答える 4

49

これが私の古いプロジェクトの1つで使用したものです。それがあなたの助けになることを願っています。

UITapGestureRecognizer *singleTap = [[[UITapGestureRecognizer alloc] initWithTarget:    self action:@selector(doSingleTap)] autorelease];
singleTap.numberOfTapsRequired = 1; 
[self.view addGestureRecognizer:singleTap];

 UITapGestureRecognizer *doubleTap = [[[UITapGestureRecognizer alloc] initWithTarget:   self action:@selector(doDoubleTap)] autorelease];
 doubleTap.numberOfTapsRequired = 2; 
 [self.view addGestureRecognizer:doubleTap];

  [singleTap requireGestureRecognizerToFail:doubleTap];
于 2013-10-01T23:13:53.143 に答える
7

Swift 3およびSwift 4の場合:

let singleTap = UITapGestureRecognizer(target: self, action: #selector(doSingleTap))
singleTap.numberOfTapsRequired = 1

self.view.addGestureRecognizer(singleTap)

let doubleTap = UITapGestureRecognizer(target: self, action: #selector(doDoubleTap))
doubleTap.numberOfTapsRequired = 2

self.view.addGestureRecognizer(doubleTap)

singleTap.require(toFail: doubleTap)
于 2016-11-02T04:41:23.103 に答える