Reputation: 11148
how can I cancel or reset an UIGestureRecognizer
? The problem is, that if I set waitForSomething
to NO
during a gesture, the next event is UIGestureRecognizerStateChanged
. But the first event should be UIGestureRecognizerStateBegan
.
My Code:
- (void) panned:(UIPanGestureRecognizer *) recognizer {
if (waitForSomething) {
// cancel or reset the recognizer!
// because the next event should be UIGestureRecognizerStateBegan and not UIGestureRecognizerStateChanged
return;
}
switch (recognizer.state) {
case UIGestureRecognizerStateBegan:
// important initialisation code
break;
case UIGestureRecognizerStateChanged:
// do something
break;
}
}
Thank you for you help!
Upvotes: 19
Views: 10056
Reputation: 195
If you need to do this in more than one place:
in Swift
extension UIGestureRecognizer
{
func cancel() {
isEnabled = false
isEnabled = true
}
}
Upvotes: 0
Reputation: 19737
Swift 4:
if waitForSomething {
recognizer.isEnabled = false
recognizer.isEnabled = true
return
}
Upvotes: 0
Reputation: 11148
I got it! :-)
Maybe someone else runs in this problem, here is the solution:
if (waitForSomething) {
recognizer.enabled = NO;
recognizer.enabled = YES;
return;
}
The next event will be UIGestureRecognizerStateFailed
followed by UIGestureRecognizerStateBegan
.
Upvotes: 42