缩放MKMapView以适应注释引脚?
我正在使用MKMapView,并在地图上添加了大量5-10公里区域的注释针脚。 当我运行应用程序时,我的地图开始缩小以显示整个世界,缩放地图的最佳方式是什么,以便引脚适合视图?
编辑:我最初的想法是使用MKCoordinateRegionMake并从我的注释中计算坐标中心,经度Delta和纬度Delta。 我很确定这会起作用,但我只是想检查我没有错过任何明显的事情。
代码加入,BTW:FGLocation是符合一类MKAnnotation
,locationFake是NSMutableArray
这些对象。 总是欢迎评论....
- (MKCoordinateRegion)regionFromLocations {
CLLocationCoordinate2D upper = [[locationFake objectAtIndex:0] coordinate];
CLLocationCoordinate2D lower = [[locationFake objectAtIndex:0] coordinate];
// FIND LIMITS
for(FGLocation *eachLocation in locationFake) {
if([eachLocation coordinate].latitude > upper.latitude) upper.latitude = [eachLocation coordinate].latitude;
if([eachLocation coordinate].latitude < lower.latitude) lower.latitude = [eachLocation coordinate].latitude;
if([eachLocation coordinate].longitude > upper.longitude) upper.longitude = [eachLocation coordinate].longitude;
if([eachLocation coordinate].longitude < lower.longitude) lower.longitude = [eachLocation coordinate].longitude;
}
// FIND REGION
MKCoordinateSpan locationSpan;
locationSpan.latitudeDelta = upper.latitude - lower.latitude;
locationSpan.longitudeDelta = upper.longitude - lower.longitude;
CLLocationCoordinate2D locationCenter;
locationCenter.latitude = (upper.latitude + lower.latitude) / 2;
locationCenter.longitude = (upper.longitude + lower.longitude) / 2;
MKCoordinateRegion region = MKCoordinateRegionMake(locationCenter, locationSpan);
return region;
}
你说得对。
找到你的最大和最小的纬度和经度,应用一些简单的算术,并使用MKCoordinateRegionMake
。
对于iOS 7及更高版本,使用showAnnotations:animated:
来自MKMapView.h
:
// Position the map such that the provided array of annotations are all visible to the fullest extent possible.
- (void)showAnnotations:(NSArray *)annotations animated:(BOOL)animated NS_AVAILABLE(10_9, 7_0);
这是我在这里找到的为我工作的人:
(编辑:我已经使用@ Micah的建议更新了解决方案,将pointRect增加0.1以确保rect最终不会变得无限小!)
MKMapRect zoomRect = MKMapRectNull;
for (id <MKAnnotation> annotation in mapView.annotations)
{
MKMapPoint annotationPoint = MKMapPointForCoordinate(annotation.coordinate);
MKMapRect pointRect = MKMapRectMake(annotationPoint.x, annotationPoint.y, 0.1, 0.1);
zoomRect = MKMapRectUnion(zoomRect, pointRect);
}
[mapView setVisibleMapRect:zoomRect animated:YES];
您也可以通过将第一行替换为以下内容来更新它以包含userLocation引脚:
MKMapPoint annotationPoint = MKMapPointForCoordinate(mapView.userLocation.coordinate);
MKMapRect zoomRect = MKMapRectMake(annotationPoint.x, annotationPoint.y, 0.1, 0.1);
苹果已经为IOS 7增加了一种新方法来简化生活。
[mapView showAnnotations:yourAnnotationArray animated:YES];
您可以轻松地从存储在地图视图中的数组中拉出:
yourAnnotationArray = mapView.annotations;
并快速调整相机!
mapView.camera.altitude *= 1.4;
除非用户安装了iOS 7+或OS X 10.9+,否则这不起作用。 在这里检查自定义动画
链接地址: http://www.djcxy.com/p/67271.html上一篇: Zooming MKMapView to fit annotation pins?
下一篇: Custom MKPinAnnotation callout bubble similar to default callout bubble