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

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

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

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

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

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


另请注意,在 iOS 7 中,新的 showAnnotations:animated: 方法使得此手动地图矩形构造变得不必要。 在iOS 7中,您可以执行以下操作:

[mapView showAnnotations:mapView.annotations animated:YES];

相关内容

  • 没有找到相关文章

最新更新