iPhone MKMapView:设置span/区域值以显示地图上的所有引脚



我正在做一个项目(iOS 7平台),在这个项目中,我需要5公里左右的商店的当前位置,所以如何计算跨度/区域值以在地图上显示所有当前位置的商店。

MKMapRect zoomRect = MKMapRectNull; 
double inset; 
for (id <MKAnnotation> annotation in mapVW.annotations) 
{
MKMapPoint annotationPoint = MKMapPointForCoordinate(annotation.coordinate); 
MKMapRect pointRect = MKMapRectMake(annotationPoint.x, annotationPoint.y, 0.1, 0.1); 
zoomRect = MKMapRectUnion(zoomRect, pointRect); 
inset = -zoomRect.size.width * 20; 
} 
[mapVW setVisibleMapRect:MKMapRectInset(zoomRect, inset, inset) animated:YES]; 

这就是我正在尝试的

感谢

目前尚不清楚您的确切问题是什么,但以下内容可能会有所帮助:

  • inset的计算看起来是错误的。它将inset(侧面的填充)设置为整个缩放区域宽度的20倍。您可能想要的是将inset设置为整个宽度的一小部分。也许你指的是0.20而不是20.0:

    inset = -zoomRect.size.width * 0.20;
    

    您也不需要在for循环中重复设置inset,因为它只取决于最终的width。您可以在调用setVisibleMapRect之前,将上述行移动到for循环之后。

  • 你提到了当前位置的一些问题。目前还不清楚问题是什么,但也许你的意思是这个缩放代码不包括当前位置?如果是这样的话,那么当调用此代码时,可能还没有确定当前位置。尝试将此代码移动到didUpdateUserLocation委托方法(或从中调用它)。确保showsUserLocationYES,并且已设置地图视图的delegate


顺便说一句:iOS 7包括新方法showAnnotations:animated:,它可以自动确定某些给定注释的边界矩形,并为您设置地图的可见区域。它不允许您像现在这样指定自定义插入(尽管默认值还不错)。因此,您可以执行以下操作,而不是上述循环:

[mapVW showAnnotations:mapVW.annotations animated:YES];
NSArray *anno_Arrr = mapview.annotations;
[mapview showAnnotations:anno_Arrr animated:YES];

最新更新