Аннотации можно размещать добавленными в произвольном порядке, а также добавлять или удалять из представления так же, как ячейки в табличном представлении. Таким образом, z-слой может меняться так, как вы этого не хотите.
Вот пример кода, который может вам помочь. У меня есть карта, которая отображает контакты для результатов поиска. Они делятся на обычные результаты и избранное. Я хочу, чтобы фавориты всегда были сверху или другими булавками. У меня также есть «сетка», чтобы выделить выбранный значок карты, и я всегда хочу, чтобы это было над всеми аннотациями. Я использую этот код для получения различных типов аннотаций в правильном порядке z-слоя:
- (void) mapView:(MKMapView *)aMapView didAddAnnotationViews:(NSArray *)views {
MKAnnotationView *theReticleView = nil;
for (MKAnnotationView *view in views) {
if ([[view annotation] isKindOfClass:[SearchResult class]]) {
SearchResult *result = (SearchResult*) [view annotation];
if ([result.isFavorite boolValue]) {
[[view superview] bringSubviewToFront:view];
} else {
[[view superview] sendSubviewToBack:view];
}
}
else if ([[view annotation] isKindOfClass:[MapReticle class]]) {
theReticleView = view;
}
}
if (theReticleView != nil)
[[theReticleView superview] bringSubviewToFront:theReticleView];
}