首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MKPolyLine Swift 4

MKPolyLine Swift 4
EN

Stack Overflow用户
提问于 2017-07-12 19:25:02
回答 2查看 5.7K关注 0票数 2

我正在努力学习MapKit,并添加一些MKPolyLine作为一个覆盖。几个问题:

  1. MKPolyLineMKPolyLineView的区别是什么?什么时候应该用哪一种?
  2. 对于MKPolyLine init方法,参数之一是UnsafePointer的泛型类型(MKMapPoint)?不太清楚这是什么意思。查找各种这样的问题,似乎我们应该将CLLocationCoordinate2D结构的内存地址作为参数传递,但它对我不起作用。 让testline = MKPolyline()让coords1 =CLLocationCoordinate2D(纬度: 52.167894,经度: 17.077399)让coords2 =CLLocationCoordinate2D(纬度: 52.168776,经度: 17.081326)让coords3 =CLLocationCoordinate2D(纬度: 52.167921,经度: 17.083730)

我不断得到一个"& is not allowed passing array value as 'UnsafePointer<MKMapPoint>" argument"

这里怎么了?

EN

回答 2

Stack Overflow用户

发布于 2017-07-13 07:34:22

1.

MKPolyLine是一个类,它包含多个地图坐标来定义多边形的形状,非常接近于一个坐标数组。MKPolyLineView是一个视图类,它管理MKPolyLine的可视化表示形式。正如在Kane Cheshire's answer中提到的,它已经过时了,您应该使用MKPolyLineRenderer

什么时候应该使用哪一个?

您需要使用MKPolyLineMKPolyLineRenderer,如下面的代码所示。

2.

MKPolyLine有两个初始化器:

当您想将[CLLocationCoordinate2D]传递给MKPolyLine.init时,您需要使用init(coordinates:count:)

(也可以创建一个MKMapPoint数组并将其传递给init(points:count:)。)

当您想将一个不可变的数组(用let声明)传递给UnsafePointer (非可变的)时,您不需要在&前缀。

下面的代码实际上是用Xcode 9 beta 3构建和测试的:

代码语言:javascript
复制
import UIKit
import MapKit

class ViewController: UIViewController, MKMapViewDelegate {

    @IBOutlet weak var mapView: MKMapView!

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
        let coords1 = CLLocationCoordinate2D(latitude: 52.167894, longitude: 17.077399)
        let coords2 = CLLocationCoordinate2D(latitude: 52.168776, longitude: 17.081326)
        let coords3 = CLLocationCoordinate2D(latitude: 52.167921, longitude: 17.083730)
        let testcoords:[CLLocationCoordinate2D] = [coords1,coords2,coords3]

        let testline = MKPolyline(coordinates: testcoords, count: testcoords.count)
        //Add `MKPolyLine` as an overlay.
        mapView.add(testline)

        mapView.delegate = self

        mapView.centerCoordinate = coords2
        mapView.region = MKCoordinateRegion(center: coords2, span: MKCoordinateSpan(latitudeDelta: 0.02, longitudeDelta: 0.02))
    }

    func mapView(_ mapView: MKMapView, rendererFor overlay: MKOverlay) -> MKOverlayRenderer {
        //Return an `MKPolylineRenderer` for the `MKPolyline` in the `MKMapViewDelegate`s method
        if let polyline = overlay as? MKPolyline {
            let testlineRenderer = MKPolylineRenderer(polyline: polyline)
            testlineRenderer.strokeColor = .blue
            testlineRenderer.lineWidth = 2.0
            return testlineRenderer
        }
        fatalError("Something wrong...")
        //return MKOverlayRenderer()
    }

}
票数 12
EN

Stack Overflow用户

发布于 2017-07-12 22:23:27

testCoords改为var而不是let。它需要是可变的(变量)才能作为指针传入。

您还试图将一个CLLocationCoordinate2D数组传递到一个需要一个MKMapPoint数组的参数中,或者将您的坐标转换为点,或者使用接受一个坐标数组的函数。

MKPolyLineView是一种将线条绘制到地图上的老方法,苹果的文档称,使用iOS 7及以后的MKPolylineRendererhttps://developer.apple.com/documentation/mapkit/mkpolylineview

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45066009

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档