Simultaneous use of touch down and touch up gesture recognizers

ios, iphone, uigesturerecognizer, uikit

Solution

Why don't you just check the touchUp directly from the `UILongPressGestureRecognizer`?

-(void)selectionDetected:(UILongPressGestureRecognizer*)longPress
{
    if(longPress.state==1)
    {
       //long Press is being held down
    }
    else if(longPress.state==3)
    {
        //the touch has been picked up
    }
}

Problem

I'm using two gesture recognizers on my `UIView`. One is standard `UITapGestureRecognizer`, another is very simple touch down recognizer I wrote: ``` @implementation TouchDownGestureRecognizer - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { if (self.state == UIGestureRecognizerStatePossible) { self.state = UIGestureRecognizerStateRecognized; } } - (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event { self.state = UIGestureRecognizerStateFailed; } - (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event { self.state = UIGestureRecognizerStateFailed; } @end ``` They work together only if I assign a delegate to both of them that contains this method: ``` - (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer { return YES; } ``` It's all working fine, but when I perform a long press on that view, touch down recognizer fires and touch up recognizer doesn't. For short taps everything is fine, they both fire. I implemented all methods in `UIGestureRecognizerDelegate` to return YES to no avail. If I'm adding logging to see the interaction with delegate and inside my own recognizer, I can see that for both short and long taps the invocations sequence is identical — except for the call to touch up recognizer. What do I do wrong?

Original source