2016-06-14 106 views
1

我想在MKMapView上繪製一個半球體,知道中心座標,起始角度和結束角度以及海里數的半徑。Swift:在MKMapView中繪製半球體

使用此線程(How to draw UIBezierPath overlay on MKMapView?),我已經子類MKOverlayPathRenderer劃出一道弧線:

import UIKit 
import MapKit 
class IGAAcarsDrawArc: MKOverlayPathRenderer 
{ 
    let PI = 3.14159265 
    let radius : CGFloat = 10.0 
    var startAngle: CGFloat = 0 
    var endAngle: CGFloat = 3.14159 
    var latitude = 25.96728611 
    var longitude = -80.453019440000006 

    override func createPath() 
    { 
     let line = MKPolyline() 

     let arcWidth: CGFloat = 5 

     let path = UIBezierPath(arcCenter: CGPointMake(CGFloat(latitude), CGFloat(longitude)), 
           radius: self.radius, 
           startAngle: startAngle, 
           endAngle: endAngle, 
           clockwise: true) 

     path.lineWidth = arcWidth 
     path.stroke() 
    } 
} 

現在,還不清楚怎麼用它來創建MKPolyline並在圖形頁面執行(MapView類:的MKMapView, rendererForOverlay覆蓋:MKOverlay)。

此主題(How to draw arc/curve line with MKOverlayView on MKMapView)也沒有說明太多的問題。

有人可以幫助在MKMapView繪製弧線嗎?

編輯:

這不是工作:

func mapView(mapView: MKMapView, rendererForOverlay overlay: MKOverlay) -> MKOverlayRenderer 
{ 
    if overlay is IGAAcarsDrawArc 
     { 
      let arcLine = IGAAcarsDrawArc(overlay: overlay) 

      arcLine.lineWidth = 8 
      arcLine.strokeColor = UIColor.magentaColor() 
     } 


     return MKPolylineRenderer() 
} 

非常感謝!

+0

我發現http://stackoverflow.com/questions/12062902/how-to-add-a-uibezierpath-to-a-mkmapview-using-overlays也許它會給你一些提示 – wenqi

+0

我發現這個職位:http ://stackoverflow.com/questions/12062902/how-to-add-a-uibezierpath-to-a-mkmapview-using-overlays也許它會給你一些提示 – wenqi

回答

0

你不應該繪製的路徑,但其分配給渲染器的path屬性:

子類應重寫它,並用它來創建用於繪製CGPathRef數據類型。創建路徑後,您的實現應該將其分配給路徑屬性。

所以

override func createPath() 
{ 
… 
    let path = UIBezierPath(arcCenter: CGPointMake(CGFloat(latitude), CGFloat(longitude)), 
          radius: self.radius, 
          startAngle: startAngle, 
          endAngle: endAngle, 
          clockwise: true) 

    path.lineWidth = arcWidth 
    self.path = path.cgPath // assign instead of stroke 
} 

鍵入Safari瀏覽器。

+0

謝謝。不過,我已經嘗試過了。我相信它不適用於UIBezierPath,因爲顯示以下錯誤:「UIBezierPath'類型的值沒有成員'cgPath'。 –

+0

當然,它是'CGPath'。Typo。但是,如果這是錯誤,直接創建一個'CGPath'實例。 –