缩放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