2015-08-21 4 views
5

Ich erstelle eine einfache Punkt Annotation mit einem Callout innerhalb der UITapGestureRecognizer Delegate.PointAnnotation Callout auf MKMapView erscheint und dann sofort verschwindet

Wenn ich zum ersten Mal auf die Karte tippe, erscheint der Pin mit dem Callout, aber der Callout verschwindet sofort danach.

Wenn ich das zweite Mal auf den gleichen Pin klicke, erscheint das Callout und bleibt dort, nicht sicher, warum es beim ersten Mal verschwindet.

@IBAction func handleMapTouch(recognizer: UITapGestureRecognizer){ 
    let view = recognizer.view 
    let touchPoint=recognizer.locationInView(view) 
    var touchCord=CLLocationCoordinate2D() 

    touchCord = mapView.convertPoint(touchPoint, toCoordinateFromView: 
    mapView) 

     mapView.removeAnnotations(mapView.annotations) 
     pointAnnotation.coordinate=touchCord 
     pointAnnotation.title="ABC" 
     pointAnnotation.subtitle="DEF" 

     mapView.addAnnotation(pointAnnotation) 
     mapView.selectAnnotation(pointAnnotation, animated: true) 


} 
+0

einmal versuchen, diese Linie zu entfernen - mapView.selectAnnotation (pointAnnotation, animiert: true) – Dev

+0

, das ist, wie ich es codiert zuerst, aber ohne diese Linie die callout bei nicht zeigen alles auf den ersten Klick (auch für kurze Zeit). – nisgupta

+0

Dieses Problem ist immer noch ungelöst, kann jemand bitte helfen? – nisgupta

Antwort

1

Ich habe das gleiche Problem. Ich weiß auch nicht, wie ich es lösen soll, aber ich habe einen Workaround gefunden. Vielleicht kann es dir auch helfen.

I LongPressGesture verwendet TapGesture

In viewDidLoad zu ersetzen:

let longPress = UILongPressGestureRecognizer(target: self, action: "addAnnotation:") 
longPress.minimumPressDuration = 0.1 
self.mapView.addGestureRecognizer(longPress) 

In Funktion AddAnnotation:

if(gestureRecognizer.state == .Ended){ 
    self.mapView.removeGestureRecognizer(gestureRecognizer) 

    //remove all annotation on the map 
    self.mapView.removeAnnotations(self.mapView.annotations) 

    //convert point user tapped to coorinate 
    let touchPoint: CGPoint! = gestureRecognizer.locationInView(self.mapView) 
    let touchMapCoordinate: CLLocationCoordinate2D = self.mapView.convertPoint(touchPoint, toCoordinateFromView: self.mapView) 
    showCustomAnnotation(touchMapCoordinate) 
} 
self.mapView.addGestureRecognizer(gestureRecognizer) 
1

Für den Fall, jemand anderes das gleiche Problem hat, obwohl Keiths Antwort funktioniert, in Mein Fall stört andere Gesten, die mit der Karte verbunden sind, wie Pinch und Zoom.

Für mich verzögerte einige Millisekunden die Aktion der Anzeige des Callouts besser.

In Swift 3:

let deadlineTime = DispatchTime.now() + .milliseconds(500) 
DispatchQueue.main.asyncAfter(deadline: deadlineTime) { 
    mapView.addAnnotation(pointAnnotation) 
    mapView.selectAnnotation(pointAnnotation, animated: true) 
} 
Verwandte Themen