Skip to content

Instantly share code, notes, and snippets.

Embed
What would you like to do?
A UIPanGestureRecognizer subclass to recognize immediately. Is this a good idea?
@implementation ImmediatePanGestureRecognizer
- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event {
[super touchesBegan:touches withEvent:event];
if (self.numberOfTouches >= self.minimumNumberOfTouches) {
self.state = UIGestureRecognizerStateBegan;
}
}
- (void)setState:(UIGestureRecognizerState)state {
// We don't want to enter the begin state if we've already began.
// Need to do this because we're prematurely firing "Began" on touches began
// and UIPGR will fire it somewhere else (presumably -touchesMoved:)
if (self.state == UIGestureRecognizerStateBegan && state == UIGestureRecognizerStateBegan) {
return;
}
[super setState:state];
}
@end
@jbrennan

This comment has been minimized.

Copy link
Owner Author

@jbrennan jbrennan commented Dec 30, 2015

Blech, although this gets rid of the need for touch movement before it starts, there still seems to be about a 1 second (!!!) delay between when I tell the gesture recognizer to start and when I get my action callback.

Instead, I’m just reverting back to using UILongPressGestureRecognizer with a short duration and a large allowable movement. Works better.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment