我试图在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中实现(mapView: MKMapView,rendererForOverlay overlay: 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()
}非常感谢!
发布于 2016-06-25 17:08:12
不应绘制路径,而应将其指定给渲染器的path属性:
子类应该覆盖它,并使用它来创建用于绘图的CGPathRef数据类型。创建路径后,您的实现应将其分配给path属性。
所以
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中输入。
https://stackoverflow.com/questions/37801822
复制相似问题