iOS:放大地图,某些标记在iOS 7中不起作用

时间:2013-11-06 22:14:24

标签: ios map mkmapview mkmaprect

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

- (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 个答案:

答案 0 :(得分:0)

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

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

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

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

只需将缩放代码(if块内的部分)放在添加注释的代码之后(可能是在经过for的{​​{1}}循环之后)。这应该适用于任何iOS版本。


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

arrayResults