MKDirections的替代路线

时间:2014-02-03 01:06:35

标签: ios mkmapview mapkit

我刚刚按照本教程在iOS 7 http://www.techotopia.com/index.php/Using_MKDirections_to_get_iOS_7_Map_Directions_and_Routes

中的地图上绘制路线

很棒,但我找不到如何在不同的颜色上绘制替代路线,并在触摸每条路线时改变颜色。使用此代码,所有路径都使用相同的颜色绘制:

- (MKOverlayRenderer *)mapView:(MKMapView *)mapView rendererForOverlay:(id < MKOverlay >)overlay
{
      MKPolylineRenderer *renderer = 
            [[MKPolylineRenderer alloc] initWithOverlay:overlay];
      renderer.strokeColor = [UIColor blueColor];
      renderer.lineWidth = 5.0;
      return renderer;
}

有什么想法吗?谢谢你的建议

2 个答案:

答案 0 :(得分:3)

警告:我没试过这个;我只是在这里输入它而不运行它,这是我很少做的事情。所以它可能不起作用。

我建议使用具有颜色属性的MKPolyline子类。当我想基于方向段添加折线作为地图的叠加层时,我会实例化该子类并给它一个颜色。这很棘手,但我认为可以做到:

MKPolyline* poly = route.polyline;
MyColoredPolyline* poly2 = 
    [MyColoredPolyline polylineWithPoints:poly.points count:poly.pointCount];
poly2.color = // whatever
[self.map addOverlay:poly2];

稍后,渲染器可以获取该颜色并使用它来设置MKPolylineRenderer的笔触颜色。

if ([overlay isKindOfClass:[MyColoredPolyline class]]) {
    v = [[MKPolylineRenderer alloc] initWithPolyline:(MKPolyline*)overlay];
    v.strokeColor = ((MyColoredPolyline*)overlay).color;

答案 1 :(得分:2)

以下是一些“直截了当,简单易懂”的方式来做你所描述的:

  1. “如何使用其他颜色绘制替代路线” :由于MKDirections似乎没有使用subtitle它创建的叠加层的属性,您可以在添加叠加层之前在其中填充“颜色代码”,然后在rendererForOverlay中,根据其subtitle设置折线的颜色。

    然而,正如@matt评论和回答的那样,更好的方法是将MKPolyline子类化并创建一个明确的color属性。

  2. “触摸每条路线” :检测路线上的触摸更加困难。 @Jensemann的This answer效果很好。
  3. “触摸每条路线时更改颜色” :触摸路线后更改颜色可以通过删除叠加层,更改其“颜色代码”,然后再添加叠加层。这里的另一个选择是创建一个自定义叠加视图(iOS 7中的渲染器),其颜色可以动态更改。