2011-01-17 8 views

Respuesta

54

Se puede acceder a las anotaciones del mapa usando su propiedad annotations. Obtener vistas para todas las anotaciones puede no ser siempre posible, ya que las anotaciones que actualmente no están visibles en el mapa pueden no tener vistas asociadas a ellas, pero para la anotación arbitraria puede intentar obtener una vista utilizando el método -viewForAnnotation:.

Así que aquí cómo se puede iterar a través de anotaciones todo de mapa y tratar de acceder a sus puntos de vista:

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

Esto creará un nuevo conjunto de MKAnnotationViews - no devolver el los existentes en su mapa. –

+4

^No, no creará una nueva anotación. La solución original es correcta. – n13

+5

Aneil, sospecho que estás confundiendo el método 'MKMapView'' viewForAnnotation' (que funciona correctamente en el ejemplo de Vladimir) con el método 'MKMapViewDelegate'' mapView: viewForAnnotation: '(que crea anotaciones, pero nunca llamas directamente). – Rob

3

en 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

Eso fue increíble hermano. . me salvó el tiempo. . –

Cuestiones relacionadas