Swift 适合注释

Swift fit annotations

我在解析中有几个位置正在查询。它显示所有注释,但只缩放最后一个。我怎样才能找到最大和最小纬度和经度并使它们合适?

Whosebug 上有很多这些,但它们几乎都在 objective-c。

Objective-C 中的示例基本上仍然有效,因为基础 SDK/API 仍然相同——只是使用不同的语言调用(并且始终有文档)。

要显示所有注释,基本上有两种方法:

  1. 使用方便的showAnnotations方法。你传递给它一个注释数组,它会自动计算出一个合理的区域来显示。在添加所有注释后调用它(在 for 循环之后)。事实上,如果注释不在地图上,showAnnotations 甚至会自行添加注释。要显示地图上已有的所有注释,只需将地图自己的 annotations 数组传递给它即可。示例:

    self.mapView.showAnnotations(self.mapView.annotations, animated: true)
    
  2. 如果您对showAnnotations计算出的默认区域不满意,您可以自己计算一个。而不是计算 minimum/maximum 纬度和经度等,我更喜欢使用内置的 MKMapRectUnion 函数来创建一个适合所有注释的 MKMapRect 然后调用 setVisibleMapRect(mapRect,edgePadding,animated) 让一种方便地在拟合地图矩形周围的屏幕点中定义填充。这种技术最初是在 Apple 的一个非常早期的地图视图示例应用程序中发现的。示例:

    var allAnnMapRect = MKMapRectNull
    
    for object in objects! {
        //existing code that creates annotation...
        //existing code that calls addAnnotation...
    
        let thisAnnMapPoint = MKMapPointForCoordinate(annotation.coordinate)
        let thisAnnMapRect = MKMapRectMake(thisAnnMapPoint.x, thisAnnMapPoint.y, 1, 1)
        allAnnMapRect = MKMapRectUnion(allAnnMapRect, thisAnnMapRect)
    }
    
    //Set inset (blank space around all annotations) as needed...
    //These numbers are in screen CGPoints...
    let edgeInset = UIEdgeInsetsMake(20, 20, 20, 20)
    
    self.mapView.setVisibleMapRect(allAnnMapRect, edgePadding: edgeInset, animated: true)