【问题标题】:Swift: Draw a semi-sphere in MKMapViewSwift:在 MKMapView 中绘制一个半球体
【发布时间】:2016-10-14 14:01:40
【问题描述】:

我正在尝试在 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()
 }

非常感谢!

【问题讨论】:

标签: swift mkmapview polyline


【解决方案1】:

您不应该绘制路径,而是将其分配给渲染器的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 中输入。

【讨论】:

  • 谢谢。不过,我已经尝试过了。我相信它不适用于 UIBezierPath,因为显示了以下错误:“'UIBezierPath' 类型的值没有成员'cgPath'。
  • 当然是CGPath。错字。但是,如果这是错误,只需直接创建CGPath 的实例即可。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-06-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-08-05
  • 2012-06-23
  • 2017-04-04
相关资源
最近更新 更多