2011-01-17 2 views

ответ

54

Вы можете получить доступ к аннотациям карты, используя его свойство annotations. Получение просмотров для всех аннотаций может быть не всегда возможным, поскольку аннотации, которые в настоящее время не видны на карте, могут не иметь никаких связанных с ними представлений, но для произвольной аннотации вы можете попытаться получить представление с использованием метода -viewForAnnotation:.

Так вот, как вы можете перебирать аннотации карты все и попытаться открыть свои взгляды:

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

Это создаст новый набор MKAnnotationViews - не вернуть существующих на вашей карте. –

+4

^Нет, это не создаст новую аннотацию. Исходное решение верное. – n13

+5

Aneil, я подозреваю, что вы запутываете метод 'MKMapView'' viewForAnnotation' (который корректно работает в примере Владимира) с помощью метода 'MKMapViewDelegate'' mapView: viewForAnnotation: '(который создает аннотации, но вы никогда не вызываете напрямую). – Rob

3

В быстром 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

Это было ужасно. , это спасло мое время. , –

Смежные вопросы