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

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

- (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, знаете почему? Спасибо

1 ответ

Решение

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

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

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

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

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


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

[mapView showAnnotations:mapView.annotations animated:YES];
Другие вопросы по тегам