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 문을 사용하면 강제로 한 번만 실행할 수 있습니다. –

관련 문제