2011-01-17 9 views

Odpowiedz

54

Można uzyskać dostęp do map w adnotacji przy użyciu jego annotations nieruchomości. Uzyskiwanie widoków dla wszystkich adnotacji może nie zawsze być możliwe, ponieważ adnotacje, które nie są obecnie widoczne na mapie, mogą nie mieć żadnych widoków z nimi powiązanych, ale w przypadku dowolnej adnotacji możesz spróbować uzyskać widok, używając metody -viewForAnnotation:.

Więc jak można iterację Wszystko Mapa w adnotacjach i próby uzyskania dostępu do swoich poglądów:

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

Spowoduje to utworzenie nowego zestawu MKAnnotationViews - nie zwracają istniejące na twojej mapie. –

+4

^Nie, nie utworzy nowej adnotacji. Oryginalne rozwiązanie jest poprawne. – n13

+5

Aneil, podejrzewam, że mylisz metodę 'MKMapView'' viewForAnnotation' (która działa poprawnie w przykładzie Vladimira) z metodą 'MKMapViewDelegate'' mapView: viewForAnnotation: '(która tworzy adnotacje, ale nigdy nie wywołujesz bezpośrednio). – Rob

3

W szybkiej 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

To było niesamowite bro. . to oszczędzało mój czas. . –

Powiązane problemy