Как определить порядок наложения MKAnnotationViews?

Я не разрабатывал в течение почти 20 лет, но я нахожу, что использование IDE / отладчик могу:

  • видят все виды вещей, которые я, возможно, не думал для включения в оператор печати
  • шаг через код, чтобы видеть, соответствует ли это пути, я думал, что это взяло бы
  • переменные набора к определенным значениям, чтобы заставить код взять определенные ответвления
36
задан 17 July 2009 в 19:46
поделиться

2 ответа

Хорошо, поэтому для решения используйте метод из MKMapViewDelegate


- (void)mapView:(MKMapView *)mapView didAddAnnotationViews:(NSArray *)views
 

. В этом методе вы должны изменить порядок AnnotationView после того, как он был добавлен в представление mapKit. Итак, код может выглядеть так:


- (void)mapView:(MKMapView *)mapView didAddAnnotationViews:(NSArray *)views {
   for (MKAnnotationView * annView in views) {
      TopBottomAnnotation * ann = (TopBottomAnnotation *) [annView annotation];
      if ([ann top]) {
         [[annView superview] bringSubviewToFront:annView];
      } else {
         [[annView superview] sendSubviewToBack:annView];
      }
   }

}

У меня работает.

41
ответ дан 27 November 2019 в 05:38
поделиться

Я обнаружил, что это переупорядочение представлений аннотаций приводит к тому, что выноска, которая появляется при нажатии на одну из них, больше не находится поверх всех аннотаций. Я даже пробовал доработать его так, чтобы вместо приноситьSubviewToFront и sendSubviewToBack я использовал insertSubview: aboveSubview и insertSubview: belowSubview], где 1118787 второй аргумент - это первый элемент annotationView в списке. Казалось бы, это приведет к гораздо меньшему рассеянию спереди назад, но выноски по-прежнему появляются под некоторыми аннотациями.

2
ответ дан 27 November 2019 в 05:38
поделиться
Другие вопросы по тегам:

Похожие вопросы: