2014-12-29 5 views
4

UILongPressGestureRecognizer дважды срабатывает, когда пользователь долго нажимает на карту более 2-4 секунд. Как я могу убедиться, что он будет запущен только один раз?UILongPressGestureRecognizer дважды запускается

func action(gestureRecognizer:UIGestureRecognizer) { 

    println("long pressed on map") 


override func viewDidLoad() { 
    super.viewDidLoad() 

    manager = CLLocationManager() 
    manager.delegate = self 
    manager.desiredAccuracy = 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) 

} 

ответ

27

Вы должны проверить этот жест recognizer's state для начала жеста:

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

Long прессовых жесты являются непрерывными. Жест начинается (UIGestureRecognizerStateBegan), когда число допустимых пальцев (numberOfTouchesRequired) было нажато в течение заданного периода (minimumPressDuration), и штрихи не выходят за допустимый диапазон движения (допустимое перемещение). Устройство распознавания жестов переходит в состояние изменения всякий раз, когда палец перемещается, и заканчивается (UIGestureRecognizerStateEnded), когда любой из пальцев поднимается.

попробовать что-то вроде этого:

let longGesture = UILongPressGestureRecognizer(target : self, 
action : #selector(someFunc(gestureRecognizer:))) 


func someFunc(gestureRecognizer: UILongPressGestureRecognizer){ 
if gestureRecognizer.state == .began { 
//do something 
} 
Смежные вопросы