在我的应用程序中,我使用此代码放大我的标记所在的地图:
- (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
块内的部分)放在添加注释的代码之后(大概是在通过arrayResults
的for
循环之后)。 这应该适用于任何iOS版本。
另请注意,在 iOS 7 中,新的 showAnnotations:animated: 方法使得此手动地图矩形构造变得不必要。 在iOS 7中,您可以执行以下操作:
[mapView showAnnotations:mapView.annotations animated:YES];