折线不会出现在 MapKit 中

Polyline won't show up in MapKit

我正在使用 Xcode 8.3.2,所以我首先导入 mapkit。然后我在地图上设置标记。然后我添加以下代码以向地图添加多段线,但它不会显示任何内容。

class ViewController: UIViewController, MKMapViewDelegate { @IBOutlet 弱变量 mapView: MKMapView!

    override func viewDidLoad() {
     self.mapView.delegate = self
    super.viewDidLoad()
    let template = "http://tile.openstreetmap.org/{z}/{x}/{y}.png"
        let point1 = CLLocationCoordinate2D(latitude: 6.9271, longitude: 79.8612);
        let point2 = CLLocationCoordinate2D(latitude: 9.6615, longitude: 80.0255);

            let overlay = MKTileOverlay(urlTemplate: template)
            overlay.canReplaceMapContent = true
            let location = CLLocationCoordinate2DMake(6.878069, 79.892119)
            mapView.add(overlay, level: .aboveLabels)
            mapView.setRegion(MKCoordinateRegionMakeWithDistance(location, 1100, 1100), animated: true)
            let pin = PinAnnotation(title: "Nimbus", subtitle: "Best", coordinate: location)
            mapView.addAnnotation(pin)



        let points: [CLLocationCoordinate2D]
        points = [point1, point2]

        let polyline = MKGeodesicPolyline(coordinates: points, count: 3)
        mapView.add(polyline)
        UIView.animate(withDuration: 1.5, animations: { () -> Void in
            let span = MKCoordinateSpanMake(0.01, 0.01)
            let region1 = MKCoordinateRegion(center: point1, span: span)
            self.mapView.setRegion(region1, animated: true)
        })
       }
 func mapView(_ mapview: MKMapView, rendererFor overlay: MKOverlay) ->MKOverlayRenderer{
                    if let overlayGeodesic = overlay as? MKGeodesicPolyline
                    {
                        let overLayRenderer = MKPolylineRenderer(polyline: overlayGeodesic)
                        overLayRenderer.lineWidth = 5
                        overLayRenderer.strokeColor = UIColor.blue
                        return overLayRenderer

                    }
        return MKOverlayRenderer(overlay: overlay)
                }

首先你需要添加这一行,我想你已经添加了但是无论如何

    self.mapView.delegate = self

之后,您需要实施此 MKMapViewDelegate 方法 func mapView(_ mapView: MKMapView, rendererFor overlay: MKOverlay) -> MKOverlayRenderer 和 return 当前覆盖所需的 MKOverlayRenderer 在这种情况下 MKPolylineRenderer 这是一个重要的部分,如果你不实现这个方法,那么你永远不会呈现你的多段线

实现会是这样的

func mapView(_ mapView: MKMapView, rendererFor overlay: MKOverlay) -> MKOverlayRenderer {

    if let overlayGeodesic = overlay as? MKGeodesicPolyline
    {
        let overLayRenderer = MKPolylineRenderer(polyline: overlayGeodesic)
        overLayRenderer.lineWidth = 5
        overLayRenderer.strokeColor = UIColor.blue
        return overLayRenderer
    }

    if let overlayTile = overlay as? MKTileOverlay{
        let overLayRenderer = MKTileOverlayRenderer(tileOverlay: overlayTile)
        return overLayRenderer
    }

   return MKOverlayRenderer(overlay: overlay)
}

瞧!有你的折线呈现