在我的应用中,我使用此代码放大我的标记所在的地图:
- (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中没有,你知道为什么吗? 感谢
答案 0 :(得分:0)
此代码依赖于非常特定的委托调用序列。
count++
意味着它假定在添加每个注释后立即和单独调用didAddAnnotationViews
委托方法。
无论iOS版本如何,这都是不安全的假设。
由于此缩放代码不依赖于注释视图来进行缩放(它只需要注释模型 - 即id<MKAnnotation>
对象),它首先不需要在didAddAnnotationViews
。
只需将缩放代码(if
块内的部分)放在添加注释的代码之后(可能是在经过for
的{{1}}循环之后)。这应该适用于任何iOS版本。
另请注意,在iOS 7中,新的showAnnotations:animated:方法使得此手动映射矩形构造变得不必要。在iOS 7中,您可以这样做:
arrayResults