我开发了一个应用程序,它使用了地图视图,它在同一个位置有多个注释,但它没有丢弃我提供注释顺序的引脚。我从数组中添加了注释,但它没有显示相同的顺序。我需要第一个对象[注释]作为该位置的顶部。当用户点击注释时,它应该将第一个对象显示为标注。任何建议都这样做。
由于 我已经尝试过这种方法,但没有运气..
- (void)mapView:(MKMapView *)mapView didAddAnnotationViews:(NSArray *)views {
for (MKAnnotationView *view in views) {
if ([[view annotation] isKindOfClass:[Annotation class]]) {
Annotation *customAnnotation = (Annotation*) [view annotation];
if ([customAnnotation markerID]==0)
[[view superview] bringSubviewToFront:view];
else {
[[view superview] sendSubviewToBack:view];
}
}
}
}
答案 0 :(得分:1)
注释可以按任意顺序添加,并且可以在视图中添加或删除单元格与表格视图中相同的方式。因此,z层可能会以您可能不想要的方式变化。
以下是一些可能对您有帮助的示例代码。我有一张地图显示搜索结果的图钉。它们分为正常结果和收藏夹。我希望收藏夹始终位于顶部或其他引脚上。我还有一个“recticle”来突出显示一个选定的地图引脚,我总是希望它在所有注释之上。我使用此代码将不同类型的注释转换为正确的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];
}