2011-01-17 6 views

Antwort

54

Sie können den Karten Zugang Anmerkungen seine annotations Eigenschaft. Das Bereitstellen von Ansichten für alle Annotationen ist möglicherweise nicht immer möglich, da Annotationen, die derzeit nicht auf der Karte sichtbar sind, möglicherweise keine Sichten zugeordnet sind. Für beliebige Annotationen können Sie jedoch mithilfe der Methode -viewForAnnotation: versuchen, eine Sicht zu erhalten.

Also hier, wie Sie durch alle Karten die Anmerkungen laufen kann und versuchen, ihre Ansichten zuzugreifen:

for (id<MKAnnotation> annotation in mapView.annotations){ 
    MKAnnotationView* anView = [mapView viewForAnnotation: annotation]; 
    if (anView){ 
     // Process annotation view 
     ... 
    } 
} 
+0

Dies wird eine neue Reihe von MKAnnotationViews schaffen - nicht die Rückkehr vorhandene auf Ihrer Karte. –

+4

^Nein, es wird keine neue Annotation erstellt. Ursprüngliche Lösung ist richtig. – n13

+5

Aneil, ich vermute, du verwirrst die MKMapView-Methode 'viewForAnnotation' (die im Vladimir-Beispiel korrekt funktioniert) mit der' MKMapViewDelegate'-Methode 'mapView: viewForAnnotation:' (die Annotationen erzeugt, aber nie direkt aufruft). – Rob

3

In swift 3.

func mapView(_ mapView: MKMapView, didSelect view: MKAnnotationView) { 

    let selectedAnnotation = view.annotation 

     for annotation in mapView.annotations { 
      let viewI = mapView.view(for: annotation) 

      if !(viewI?.annotation is MKUserLocation){ 
       if annotation.isEqual(selectedAnnotation) { 
        viewI?.image = UIImage(named: "focus.png") 
        showLifeEventView(anotation: view) //did select a point on Map. 
       }else{ 
        viewI?.image = UIImage(named: "point.png") 
       } 
      } 
     } 
} 
+1

Das war super Bro. . es hat meine Zeit gerettet. . –

Verwandte Themen