2015-08-21 17 views
5

Sto creando un'annotazione semplice con un callout all'interno del delegato UITapGestureRecognizer.Viene visualizzato il messaggio Annotazione su MKMapView che scompare immediatamente

La prima volta che tocco la mappa, il segnaposto appare con il richiamo ma il richiamo scompare immediatamente dopo.

La seconda volta che tocco lo stesso pin, viene visualizzato il callout e rimane lì, non è sicuro perché scompaia alla prima volta.

@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

Una volta provare rimuovendo questa linea - mapView.selectAnnotation (pointAnnotation, animati: vero) – Dev

+0

è così che ho codificato per primo, ma senza quella linea il callout non mostra a tutto al primo clic (anche per un breve periodo). – nisgupta

+0

Questo problema è ancora irrisolto, qualcuno può aiutare per favore? – nisgupta

risposta

1

Ho lo stesso problema. Non so come risolverlo, ma ho trovato una soluzione alternativa. Forse può aiutarti anche tu.

ho usato LongPressGesture sostituire TapGesture

In viewDidLoad:

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

In funzione 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

Nel caso in cui qualcun altro ha lo stesso problema, anche se La risposta di Keith funziona, in il mio caso interrompe altri gesti associati alla mappa, come pizzicare e zoomare.

Per me, ritardando di alcuni millisecondi, l'azione di mostrare il callout ha funzionato meglio.

In Swift 3:

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