I am detecting if the user has pressed down for 2 seconds:
UILongPressGestureRecognizer *longPress = [[UILongPressGestureRecognizer alloc]
initWithTarget:self
action:@selector(handleLongPress:)];
longPress.minimumPressDuration = 2.0;
[self addGestureRecognizer:longPress];
[longPress release];
This is how I handle the long press:
-(void)handleLongPress:(UILongPressGestureRecognizer*)recognizer{
NSLog(@"double oo");
}
The text "double oo" gets printed twice when I press down for longer than 2 seconds. Why is this? How can I fix?
Swift 3.0:
your gesture handler receives call for each state of gesture. so you need to put a check for each state and put your code in required state.
One must prefer using switch-case over if-else :
To check the state of the UILongPressGestureRecognizer just add an if statement on the selector method:
You need to check the correct state, since there are different behaviors for each state. Most likely you're going to need the
UIGestureRecognizerStateBegan
state with theUILongPressGestureRecognizer
....
UILongPressGestureRecognizer is a continuous event recognizer. You have to look at the state to see if this is the start, middle or end of the event and act accordingly. i.e. you can throw away all events after the start, or only look at movement as you need. From the Class Reference:
Now You Can Track The State Like This
Here's how to handle it in Swift: