Daily Archives: August 11, 2015

Gesture Recognizers in iOS 9

I don’t code nearly as much as I’d like to, so keeping up-to-date is always a major challenge. I’m still trying to get up to speed on all the great iOS 8 updates with iOS 9 is right around the corner. So, this is probably not news to you but it was news to me.

Prior to iOS 9, you could have a gesture recognizer (GR) associated with 2 different views. You weren’t supposed to but you could. After wiring the GR to both views, you could add the UIGestureRecognizerDelegate method:

– (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch

return YES, and Bob was your uncle. If you do that in iOS 9, you get a very nice error message stating you were never supposed to do that, it’s now being enforced, and the GR will only be added to the view that first loads it. Having figured that out, okay, no biggie, I removed one of my views from all my GRs and then added “duplicate” GRs to the other view, named them differently so I knew which were which, and wired them to the same action method. All good to go.

P.S. Here’s the relevant Apple Documentation page. Scroll down to:

Gesture Recognizers Are Attached to a View

Every gesture recognizer is associated with one view. By contrast, a view can have multiple gesture recognizers, because a single view might respond to many different gestures. For a gesture recognizer to recognize touches that occur in a particular view, you must attach the gesture recognizer to that view. When a user touches that view, the gesture recognizer receives a message that a touch occurred before the view object does. As a result, the gesture recognizer can respond to touches on behalf of the view.