2016-06-14 44 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'实例。 –