2011-04-15 226 views
12

现在需要帮助。 我可以用MKPolyline和MKPolylineView画线,但是如何在MKMapView上的两个坐标之间绘制一条弧或曲线? 非常感谢。如何在MKMapView上使用MKOverlayView绘制圆弧/曲线线

最终的解决方案

最后我写我自己这些结论这里是为了帮助谁想要它。

如果你想:

  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. 使用核心图形绘制路径,而不是MapKit坐标也不UIView的坐标!
  2. 在CG功能只需记住线宽应该被此功能转换:MKRoadWidthAtZoomScale(zoomScale)
  3. 希望能帮到
+0

嗨,我正在尝试你的解决方案在我的地图上绘制单纯的弧形路径,但我遇到了一些问题......你能告诉我一些代码,因为我真的需要在我的应用程序中做到这一点,不能找到迄今为止的任何工作...预先感谢! Ben – Ben 2011-06-21 07:47:56

+0

嗨,@Ben。你想在你的地图上画什么? – Shiny 2011-06-22 03:20:28

+0

谢谢!在第1部分中,当你说:“然后在-mapView:viewForOverlay:方法中,创建自定义类,然后选择该多段线。”我应该这样做:[[THE-CUSTOM-CLASS alloc] initWithOverlay:THE-MKPOLYLINE-OVERLAY] – spiralstairs 2011-12-27 06:56:36

回答

1

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

我不知道(和文档没有提到),路径的坐标应该是什么格式(MKMapPointCLLocationCoordinate2D想到),但你可以通过试验一下找到。

+0

谢谢Ole Begemann。 – Shiny 2011-05-05 01:12:18

+0

您必须将坐标转换为相对于视图的点,MapView有一个方法convetCoordinatestoPoints并且相反,这可能有助于构建CGPathRef – iDroid 2012-02-16 12:52:42

1

您在您的评论回答自己了,但我想在GitHub上的出色AIMapViewWrapper项目,其中包括sample code超过一组坐标绘制弧形路径指向每一个人。在那个项目中,它被用来绘制一架飞机所采用的路径,包括它下面的阴影路径(以及其他东西,例如沿着该路径对平面进行动画制作)。任何人都可以在这种情况下派上用场。