2014-10-02 3 views
0

Следующий код, кажется, печатает значения дважды, даже если я удерживаю их в течение 2 секунд.Почему UILongPressGestureRecognizer возвращается дважды

Независимо от того, какую продолжительность я перехожу к нему, кажется, что она выполняется дважды, кто-нибудь знает, почему это может быть?

func action(gestureRecognizer:UIGestureRecognizer){ 
    var touchPoint = gestureRecognizer.locationInView(self.myMap); 
    var newCo = myMap.convertPoint(touchPoint, toCoordinateFromView: self.myMap); 
    var annotation = MKPointAnnotation(); 
    annotation.coordinate = newCo; 
    var loc = CLLocation(latitude: newCo.latitude, longitude: newCo.longitude); 
      CLGeocoder().reverseGeocodeLocation(loc, completionHandler: {(placemarks, error)->Void in 
     let pm:CLPlacemark = placemarks[0] as CLPlacemark; 

     var address = pm.locality + " ," + pm.postalCode + " ," + pm.administrativeArea + " ," + pm.country; 
     annotation.title = address; 
     self.myMap.addAnnotation(annotation); 
     println(address); 
     println("\(newCo.latitude)"); 
     println("\(newCo.longitude)"); 
     //places.append(["name:":address, "lat": "\(newCo.latitude)", "lon":"\(newCo.longitude)"]); 
    }) 


} 

ответ

2

Проверьте состояние штата UIGestureRecognizer, вы, вероятно, получаете как начало, так и конец.

enum UIGestureRecognizerState : Int { 
    case Possible 
    case Began 
    case Changed 
    case Ended 
    case Cancelled 
    case Failed 
} 
+0

так я хотел бы, чтобы обернуть свой код в если (жест state.state == UIGestureRecognizerState.Began) {делать-вещи?} – Biscuit128

+0

Да, либо на время начала или окончания, зависит от того, как вы хотите, чтобы пользователь взаимодействовал с ним. То есть, начните использовать, если вы хотите распечатать местоположение после того, как была нажата длительная длительность нажатия, или использовать конец, когда пользователь освобождается от печати. –

0
func action(gestureRecognizer:UIGestureRecognizer) { 
    print("Gesture Recognized") 

    if gestureRecognizer.state == UIGestureRecognizerState.Ended { 
     let touchPoint = gestureRecognizer.locationInView(self.map) 
     let newCoordinate:CLLocationCoordinate2D = self.map.convertPoint(touchPoint, toCoordinateFromView: self.map) 
     print(newCoordinate) 
     listNewCoordinates.append(newCoordinate) 
     let annotation = MKPointAnnotation() 
     annotation.coordinate.longitude = newCoordinate.longitude 
     annotation.coordinate.latitude = newCoordinate.latitude 

     self.map.addAnnotation(annotation) 
    } 

} 
+0

Раздел «if gestureRecognizer.state == UIGestureRecognizerState.Ended» разрешает запуск кода в условном выражении только потому, что UIGestureRecognizer зарегистрировал, что жест закончен. Функция работает для двух состояний, она запускается, когда начинается жест, и он запускается, когда жест заканчивается. Используя оператор if, вы можете заставить его работать только один раз. –

Смежные вопросы