2011-04-15 204 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超過一組座標繪製弧形路徑指向每一個人。在那個項目中,它被用來繪製一架飛機所採用的路徑,包括它下面的陰影路徑(以及其他東西,例如沿着該路徑對平面進行動畫製作)。任何人都可以在這種情況下派上用場。