MKMapView缩放以显示帧中的所有注释

时间:2015-01-21 16:59:40

标签: ios mkmapview mapkit

我有一个全屏幕地图,我想缩放到所有注释在地图上可见的级别,但只能在应用程序的内容区域中显示,如此图像所示:

enter image description here

正如您所看到的,地图会填满整个屏幕,但是,顶部和底部覆盖着覆盖地图的矩形。内容区域是亮绿色的部分。给定一系列注释,我希望能够缩放地图,使所有内容都在绿色内容区域内可见,而不是在地图的实际框架内。

我在这里使用这个(类别)方法,它执行缩放的默认任务以适合地图的框架。但是我不知道如何修改它只考虑内容区域:

- (void)zoomToShowAnnotations:(NSArray *)annotations extraPaddingMultiplier:(CGFloat)multiplier
{
    CLLocationCoordinate2D topLeftCoord;
    topLeftCoord.latitude = -90;
    topLeftCoord.longitude = 180;

    CLLocationCoordinate2D bottomRightCoord;
    bottomRightCoord.latitude = 90;
    bottomRightCoord.longitude = -180;

    for(id<MKAnnotation> annotation in annotations)
    {
        topLeftCoord.longitude = fmin(topLeftCoord.longitude, annotation.coordinate.longitude);
        topLeftCoord.latitude = fmax(topLeftCoord.latitude, annotation.coordinate.latitude);

        bottomRightCoord.longitude = fmax(bottomRightCoord.longitude, annotation.coordinate.longitude);
        bottomRightCoord.latitude = fmin(bottomRightCoord.latitude, annotation.coordinate.latitude);
    }

    MKCoordinateRegion region;
    region.center.latitude = topLeftCoord.latitude - (topLeftCoord.latitude - bottomRightCoord.latitude) * 0.5;
    region.center.longitude = topLeftCoord.longitude + (bottomRightCoord.longitude - topLeftCoord.longitude) * 0.5;

    region.span.latitudeDelta = fabs(topLeftCoord.latitude - bottomRightCoord.latitude) * (multiplier != 0 ? multiplier : 1); // Add a little extra space on the sides
    region.span.longitudeDelta = fabs(bottomRightCoord.longitude - topLeftCoord.longitude) * (multiplier != 0 ? multiplier : 1); // Add a little extra space on the sides

    [self setRegion:region animated:YES];
} 

2 个答案:

答案 0 :(得分:3)

根据文件记载,这种方法应该适合这项工作。

// Position the map such that the provided array of annotations are all visible to the fullest extent possible.
@available(iOS 7.0, *)
open func showAnnotations(_ annotations: [MKAnnotation], animated: Bool)

你必须设置一个注释数组并将其放在像这样的函数中

    let annotation = MKPointAnnotation()
    annotation.coordinate = CLLocationCoordinate2D(latitude: 11.12, longitude: 12.11)
    mapView.addAnnotation(annotation)
    mapView.showAnnotations([annotation], animated: true)

答案 1 :(得分:1)

这只是一个步骤列表,没有实际代码或任何内容。

  1. 计算您找到的地区的宽高比。
  2. 如果宽高比相对宽于(或等于)您想要的比例,请转到步骤5.
  3. 构建适合您现有区域的新区域,其宽高比与所需比例相匹配(展开宽度)。
  4. 在屏幕内构建适合展开区域的新区域(展开高度)。
  5. 派对。