UILongPressGestureRecognizer es despedido dos veces

UILongPressGestureRecognizer se dispara dos veces cuando el usuario presiona un map durante más de 2-4 segundos. ¿Cómo puedo asegurarme de que solo se activará una vez?

func action(gestureRecognizer:UIGestureRecognizer) { println("long pressed on map") override func viewDidLoad() { super.viewDidLoad() manager = CLLocationManager() manager.delegate = self manager.desinetworkingAccuracy = kCLLocationAccuracyBest if activePlace == -1 { manager.requestWhenInUseAuthorization() manager.startUpdatingLocation() } else { var uilpgr = UILongPressGestureRecognizer(target: self, action: "action:") uilpgr.minimumPressDuration = 2.0 myMap.addGestureRecognizer(uilpgr) } } func action(gestureRecognizer:UIGestureRecognizer) { println("long pressed on map") var touchPoint = gestureRecognizer.locationInView(self.myMap) var newCoordinate = myMap.convertPoint(touchPoint, toCoordinateFromView: self.myMap) var annotation = MKPointAnnotation() annotation.coordinate = newCoordinate //annotation.title = "New Place" myMap.addAnnotation(annotation) var loc = CLLocation(latitude: newCoordinate.latitude, longitude: newCoordinate.longitude) } 

Tienes que verificar el state reconocedor de gestos para el comienzo del gesto:

 func action(gestureRecognizer:UIGestureRecognizer) { if gestureRecognizer.state == UIGestureRecognizerState.Began { // ... } } 

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.

testing algo como esto:

 let longGesture = UILongPressGestureRecognizer(target : self, action : #selector(someFunc(gestureRecognizer:))) func someFunc(gestureRecognizer: UILongPressGestureRecognizer){ if gestureRecognizer.state == .began { //do something }