iOS 8 SDK,Swift,MapKit绘制路线

时间:2014-08-28 06:25:51

标签: swift mapkit ios8 mkoverlay mkpolyline

我需要在两点之间绘制路线,而我正在使用MKDirectionsRequest作为我的目的。

获得路线是可以的,但是我无法绘制它。

在iOS 8 SDK中没有功能

- (MKOverlayView *)mapView:(MKMapView *)mapView viewForOverlay:(id <MKOverlay>)overlay 

只有这一个:

func mapView(mapView: MKMapView!, rendererForOverlay overlay: MKOverlay!) -> MKOverlayRenderer!

由于某种原因,我无法理解为什么不调用该方法 设置MapView的委托并导入MapKit。


以下是实现的rendererForOverlay函数:

func rendererForOverlay(overlay: MKOverlay!) -> MKOverlayRenderer! {
    println("rendererForOverlay");

    var overlayRenderer : MKOverlayRenderer = MKOverlayRenderer(overlay: overlay);

    var overlayView : MKPolylineRenderer = MKPolylineRenderer(overlay: overlay);
    view.backgroundColor = UIColor.blueColor().colorWithAlphaComponent(0.5);

    return overlayView;
}


1 个答案:

答案 0 :(得分:2)

地图视图未调用您的rendererForOverlay方法,因为它未正确命名。

该方法必须完全命名:

mapView(mapView:rendererForOverlay)

但是在你的代码中它被命名为:

rendererForOverlay(overlay:)


此外,您应检查overlay参数的类型是否为MKPolyline并设置折线渲染器的strokeColor

(现有代码中的view.backgroundColor实际上是更改了视图控制器view的背景颜色 - 而不是折线。)

示例:

func mapView(mapView: MKMapView!, rendererForOverlay overlay: MKOverlay!) -> MKOverlayRenderer! {
    println("rendererForOverlay");

    if (overlay is MKPolyline) {
        var pr = MKPolylineRenderer(overlay: overlay);
        pr.strokeColor = UIColor.blueColor().colorWithAlphaComponent(0.5);
        pr.lineWidth = 5;
        return pr;
    }

    return nil
}