2014-08-28 94 views
3

我需要绘制两点之间的路线,我使用MKDirectionsRequest来达到我的目的。iOS 8 SDK,Swift,MapKit绘制路线

获得路线是可以的,但我在绘制时遇到了问题。

在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

在SO,最好的做法是包括在问题本身至少有一些相关的代码,而不仅仅是一个链接。 – Anna 2014-08-28 11:45:10

回答

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 
}