折线不会出现在MapKit中

时间:2017-08-23 09:59:31

标签: ios swift swift3 mkmapview mapkit

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

类ViewController:UIViewController,MKMapViewDelegate {     @IBOutlet弱var 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)
                }

1 个答案:

答案 0 :(得分:1)

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

    self.mapView.delegate = self

之后,您需要实施此MKMapViewDelegate方法func mapView(_ mapView: MKMapView, rendererFor overlay: MKOverlay) -> MKOverlayRenderer,并返回当前叠加层所需的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)
}

瞧!你的polyLine渲染

enter image description here