iPhone MKMapView:设置范围/区域值以显示地图上的所有图钉

时间:2014-02-26 07:37:00

标签: objective-c

我正在开发一个项目(平台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]; 

这就是我正在尝试的

由于

2 个答案:

答案 0 :(得分:3)

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

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

    inset = -zoomRect.size.width * 0.20;
    

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

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


顺便说一句:iOS 7包含新方法showAnnotations:animated:,它自动确定某些给定注释的边界矩形,并为您设置地图的可见区域。它不允许您像您一样指定自定义插入(虽然默认值不错)。所以不是上面的循环,你会这样做:

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

答案 1 :(得分:2)

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