如何使用UITapGestureRecognizer同时检测点击和双击?

ope*_*rog 13 iphone uigesturerecognizer ios uitapgesturerecognizer

例如,我有一个视图,我想要两个不同的手势:

点击做动作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];
Run Code Online (Sandbox Code Playgroud)

它总是识别单击,即使我非常快地双击.如何设置它以使轻敲手势识别器等待并看到双击手势识别器是否识别?

Adr*_*n P 45

这是我在一个旧项目中使用的,我希望它可以帮助你解决问题.

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];
Run Code Online (Sandbox Code Playgroud)

  • 这可以,但是,对于单击它会使单击的呼叫延迟 (9认同)

pab*_*ros 6

在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)
Run Code Online (Sandbox Code Playgroud)