MKPolyline / MKPolylineRenderer改变颜色而不删除它

时间:2015-05-12 09:32:59

标签: ios mapkit mkpolyline

我正在使用地图应用程序,我想问如何更改折线颜色而不删除并再次添加它,我在stackoverflow中找到了这个主题https://stackoverflow.com/questions/24226290/mkpolylinerenderer-change-color-without-removing-overlay,但这不涉及我的问题,我没有触摸该行,因此无需使用-[MKMapViewDelegate mapView:didSelectAnnotationView:]

那么可以这样做吗?

编辑:我想要做的是平滑地改变折线颜色(通过着色颜色 - 像动画一样的声音)如果您对如何设置此折线的动画有任何想法,请同时告诉我。谢谢

2 个答案:

答案 0 :(得分:7)

复杂的动画或着色/渐变可能需要创建自定义叠加渲染器类。

这些其他答案提供了有关如何绘制渐变折线的想法,动画也最需要自定义叠加渲染器:

Apple's Breadcrumb sample app还有一个您可能会觉得有用的自定义渲染器示例。


但是,如果您只想更新线条的颜色(例如从蓝色变为红色),那么您可以按照以下方式执行此操作:

  1. 获取您要更改的MKPolyline的参考。
  2. 获取对步骤1中获得的折线的MKPolylineRenderer的引用。这可以通过调用地图视图的rendererForOverlay:实例方法(与{{1不同)来完成委托方法。
  3. 更新渲染器的mapView:rendererForOverlay:
  4. 在渲染器上调用strokeColor
  5. 不确定你想要什么,但你可能能够#34;动画"通过改变颜色并逐步调用invalidatePath,颜色从蓝色变为红色。

    另一个重要的事情是确保invalidatePath 委托方法也使用“" s" current"在您直接更改了渲染器rendererForOverlay后,地图视图调用委托方法时的颜色。

    否则,在平移或缩放地图后,折线的颜色将变回委托方法中设置的任何颜色。

    您可以将线条的当前颜色保留在类级变量中,并在委托方法和您想要更改线条颜色的位置使用它。

    类级变量(可能更好)的替代方法是使用MKPolyline的strokeColor属性来保持其颜色或使用颜色属性的自定义折线覆盖类(不是渲染器)

    示例:

    title

答案 1 :(得分:2)

你应该看看MKOverlayPathRenderer方法 - invalidatePath

从文档中,它说:

  

当需要更改路径信息时,请调用此方法   您要重新创建叠加层的路径。此方法设置path属性   为nil并告诉叠加渲染器重新显示其内容。

所以,此时,你应该能够改变你的绘画颜色。