如何在MKMapView上使用MKOverlayView绘制弧线/曲线

现在需要帮助。 我可以用MKPolyline和MKPolylineView绘制线条,但是如何在MKMapView的两个坐标之间绘制一条弧线或曲线? 万分感谢。

最终的解决scheme

最后,我在这里写下自己的这些结论来帮助谁想要。

如果你想:

  1. 只需在地图上绘制弧形path
  2. 只是在地图上画一个图像
  3. 在地图上将弧形path和图像合并为叠加

所以解决scheme是:

  1. MKPolylineMKPolylineView绘制线, MKPolygonMKPolygonView绘制多边形, MKCircleMKCircleView绘制圆。 没有人适合? 弧线在哪里? 哦,是的。 现在真正的解决scheme:你创build一个派生自MKOverlayPathView的自定义类并重写-createPath方法,在-createPath中创build一个使用CGContextAddArcToPoint或其他函数的弧,并将刚刚创build的path与MKOverlayPathView的path属性相关 ,定制作品完成。 然后你在地图中添加MKPolyline(是的!只是MKPolyline !),然后在-mapView:viewForOverlay:方法中创build自定义类。 然后,运行它,一切都按照你的意愿运行。 魔法? 你可以画一个MKPolyline作为弧线!
  2. 只是一个形象? 使用MKAnnotationView 。 完成了! 你能行的! 我相信!
  3. 在我的问题中,我想绘制覆盖图中的图像的弧。 所以我创build一个自定义类符合MKOverlay协议,并从MKOverlayView派生自定义类来绘制覆盖。 一切工作正常,但我不能在地图上绘制任何path! 我已经将lineWidth设置为1,2,3,4 …但这不起作用! 啊..解决scheme是用MKRoadWidthAtZoomScale(zoomScale)函数设置线宽,你可以看到path! 那已经完成了……

这里有一些提示:

  1. 使用核心graphics来绘制path,而不是MapKit坐标和UIView坐标!
  2. 在CG函数中,请记住线宽应该由此函数转换: MKRoadWidthAtZoomScale(zoomScale)
  3. 希望有所帮助

阅读文档,似乎可以创build一个MKOverlayPathView的实例,并为其path属性分配一个任意的CGPathRef对象。 该path可以包含直线和弧线。

我不知道(和文档没有提及),path的坐标应该是什么格式( MKMapPointCLLocationCoordinate2D想到),但你也许可以通过试验find一点。

你已经在你的评论中回答了你自己,但我想指出每个人都在GitHub上的优秀的AIMapViewWrapper项目,其中包括绘制在一组坐标上的弧线path的示例代码 。 在这个项目中,它被用来绘制一架飞机的path,包括它下面的阴影path(以及其他东西,例如沿着该path的飞机animation)。 对于任何人来说,都应该派上用场。