1

在我的应用程序中,我使用此代码放大我的标记所在的地图:

- (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 中却不行,你知道为什么吗?谢谢

4

1 回答 1

0

此代码依赖于非常具体的委托调用序列。

count++意味着它假定didAddAnnotationViews委托方法将在添加每个注释后立即单独调用。

无论 iOS 版本如何,这是一个不安全的假设。

由于此缩放代码不依赖注释视图来进行缩放(它只需要注释模型——即id<MKAnnotation>对象),因此它不需要didAddAnnotationViews首先出现。

只需将缩放代码(if块内的部分)放在添加注释的代码之后(大概在经过的for循环之后arrayResults)。这应该适用于任何 iOS 版本。


另请注意,在 iOS 7 中,新的showAnnotations:animated:方法使此手动地图 rect 构造变得不必要。在 iOS 7 中,您可以这样做:

[mapView showAnnotations:mapView.annotations animated:YES];
于 2013-11-06T22:53:54.920 回答