Аннотации не отображаются на карте в порядке, указанном мною - PullRequest
0 голосов
/ 06 января 2012

Я разработал приложение, в котором используется вид карты, который имеет несколько аннотаций в одном и том же месте, но при этом не удаляются контакты, которые я предоставил для аннотаций. Я добавил аннотации из массива, но он не показывает тот же порядок. Мне нужно, чтобы первый объект [аннотация] был верхним на месте. когда пользователь нажимает на аннотацию, он должен показывать первый объект как выноску. Любые предложения, чтобы сделать то же самое.

Спасибо Я уже попробовал этот подход, но не повезло ..

- (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 Ответ

1 голос
/ 06 января 2012

Аннотации можно размещать добавленными в произвольном порядке, а также добавлять или удалять из представления так же, как ячейки в табличном представлении. Таким образом, 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];

}
...