1
votes

I have set two UITapGestureRecognizers in my xib on a UIImageView. I have also set their IBAction in the associated header file. For the single tap gesture recognizer, I set taps and touches to 1, state to Enabled, and delayed touches ended to YES in the Attributes inspector. For the double tap gesture recognizer, I set taps and touches to 2, state to Enabled, cancel touches in view to YES and delay touches ended to YES.

When I double tap on the UIImageView, it only triggers the IBAction method for the single tap. So, I decided to print the imageview.gestureRecognizer and it shows the UITapGestureRecognizer for single tap's state as Ended and the UITapGestureRecognizer for double tap's state as Possible.

I have been stuck on this for a couple hours. I found ways to do it programatically but I was wondering how I can do it by setting it in the xib itself.

Any help would be great! Thank you in advance for your responses!

1

1 Answers

2
votes

It's a very good question. If you add gestures to code like this

UITapGestureRecognizer *singleTap = [[UITapGestureRecognizer alloc] initWithTarget: self action:@selector(singleTap)];

singleTap.numberOfTapsRequired = 1;
[self.view addGestureRecognizer:singleTap];

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

[singleTap requireGestureRecognizerToFail:doubleTap];

And all works fine because you canceled first gesture here

[singleTap requireGestureRecognizerToFail:doubleTap];

If you add two gestures in xib you always should cancel single tap if there was a double tap. And you always need to use 2 properties for gestures and use

[self.firstGestureProperty requireGestureRecognizerToFail:self.secondGestureOroperty];

For single tap:

enter image description here

For double tap:

enter image description here

Source code:

enter image description here

And everything works fine.