注释不会按照我提供的顺序在地图视图上删除

时间:2012-01-06 15:09:17

标签: iphone annotations mkmapview

我开发了一个应用程序,它使用了地图视图,它在同一个位置有多个注释,但它没有丢弃我提供注释顺序的引脚。我从数组中添加了注释,但它没有显示相同的顺序。我需要第一个对象[注释]作为该位置的顶部。当用户点击注释时,它应该将第一个对象显示为标注。任何建议都这样做。

由于 我已经尝试过这种方法,但没有运气..

- (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];
        }
    }
}
}

1 个答案:

答案 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];

}