iOS: увеличение карты для некоторых маркеров не работает в iOS 7

StackOverflow https://stackoverflow.com/questions/19823934

  •  04-07-2022
  •  | 
  •  

Вопрос

В своем приложении я использую этот код для масштабирования в моей карте, где расположен мой маркер:

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

    count++;

    if (count == arrayResults.count){

        MKMapRect zoomRect = MKMapRectNull;
        for (id <MKAnnotation> annotation in mapView.annotations)
        {
            MKMapPoint annotationP = MKMapPointForCoordinate(annotation.coordinate);
            MKMapRect pointRect = MKMapRectMake(annotationP.x, annotationP.y, 0.1, 0.1);
            if (MKMapRectIsNull(zoomRect)) {
                zoomRect = pointRect;
            } else {
                zoomRect = MKMapRectUnion(zoomRect, pointRect);
            }
        }
        [mapView setVisibleMapRect:zoomRect animated:YES];
    }

}

Это работает нормально в iOS 6, но не в iOS 7, вы знаете, почему? Благодарность

Это было полезно?

Решение

Этот код опирается на очень специфические последовательности вызова делегатов.

А count++ подразумевает это предполагает didAddAnnotationViews Метод делегата будет вызван немедленно и отдельно после добавления каждой аннотации.

Это небезопасное предположение независимо от версии iOS.

Поскольку этот код увеличения не полагается на аннотацию Просмотры Чтобы сделать увеличение (это просто нужна аннотация модели - т.е. а id<MKAnnotation> объекты), это не должно быть в didAddAnnotationViews в первую очередь.

Просто поместите код увеличения (часть внутри if блокировать), сразу после кода, который добавляет аннотации (предположительно после for цикл, который проходит arrayResults) Это должно работать в любой версии iOS.


Также обратите внимание, что в iOS 7 новый Shaneannotations: Animated: Метод делает эту ручную карту прямого конструкции ненужным. В iOS 7 вы можете просто сделать:

[mapView showAnnotations:mapView.annotations animated:YES];
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top