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

Shi*_*iny 14 iphone mapkit mkmapview ipad ios

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

最终的解决方案

最后,我在这里写下了这些结论,以帮助谁想要它.

如果你想:

  1. 只需在地图上绘制弧形路径
  2. 只需在地图上绘制图像
  3. 将弧形路径和图像组合为地图上的叠加层

所以解决方案是:

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

这里有一些提示:

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

Ole*_*ann 1

阅读文档,您似乎可以创建一个实例MKOverlayPathView并将任意CGPathRef对象分配给其path属性。该路径可以包含直线和圆弧。

我不知道(并且文档没有提到)路径的坐标应该采用什么格式(MKMapPointCLLocationCoordinate2D想到),但您可能可以通过尝试一下来发现这一点。