Problema de reconocimiento de gestos largos de prensa

En Interface Builder, agregué un gestor de reconocimiento de prensa a un MKMapView.

Se envía un evento después de 1 segundo (lo estoy usando para agregar un pin al map). He marcado el comportamiento "Cancelar toques en vista" de mi reconocimiento de gestos, pero mi problema es que una vez que se reconoce el gesto de pulsación larga, si mantienes el dedo en la pantalla y lo arrastras en la vista del map, el evento (por mucho time presione) se enviarán continuamente mientras se arrastra, como si en realidad fuera un gestor de reconocimiento de arrastre, lo que daría como resultado la adición de docenas de pines a mi map …

Cómo puedo arreglar esto ?

Gracias.

De acuerdo con la documentation :

Los gestos de pulsación prolongada son continuos. El gesto comienza (UIGestureRecognizerStateBegan) cuando se ha presionado el número de dedos permitidos (numberOfTouchesRequinetworking) durante el período especificado (minimumPressDuration) y los toques no se mueven más allá del range permitido de movimiento (PermissibleMovement). El reconocedor de gestos transita al estado de cambio cada vez que se mueve un dedo , y termina (UIGestureRecognizerStateEnded) cuando se levanta cualquiera de los dedos.

Con el punto importante resaltado.

Creo que es posible que no esté filtrando el estado en el método delegado del reconocedor de gestos.

Necesitarás algo como esto:

- (void)longPressGestureRecognizerStateChanged:(UIGestureRecognizer *)recognizer { if (recognizer.state == UIGestureRecognizerStateBegan) { // do your stuff... } }