iOS 8 SDK、Swift、MapKit 绘制路线

Posted

技术标签:

【中文标题】iOS 8 SDK、Swift、MapKit 绘制路线【英文标题】:iOS 8 SDK, Swift, MapKit Drawing a Route 【发布时间】:2014-08-28 06:25:50 【问题描述】:

我需要在两点之间绘制路线,我使用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;

【问题讨论】:

在 SO 上,最好在问题本身中至少包含一些相关代码,而不仅仅是一个链接。 【参考方案1】:

地图视图没有调用您的 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

【讨论】:

以上是关于iOS 8 SDK、Swift、MapKit 绘制路线的主要内容,如果未能解决你的问题,请参考以下文章

iOS核心笔记—MapKit框架-导航

使用 mapKit 的地图显示相反的方向(iOS Swift)

Swift:SwiftUI中MapKit的使用体验

iOS 5 MapKit,MKPlacemark,在 iOS 5 上运行 iOS 4.3 应用程序

在 UILabel 中显示 HTML 文本,性能问题。 [iPhone SDK、iOS 8、Swift]

Swift mapkit未指向位置