热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

MKPolyLineSwift4

如何解决《MKPolyLineSwift4》经验,为你挑选了1个好方法。

我正在尝试学习MapKit并将其添加MKPolyLine为覆盖。几个问题:

    MKPolyLine和之间有什么区别MKPolyLineView。什么时候应该使用哪一个?

    对于MKPolyLineinit方法,参数之一是?的泛型type(MKMapPointUnsafePointer。不太确定那是什么意思。查找各种SO问题,似乎我们应该将CLLocationCoordinate2Dstruct 的内存地址作为参数传递,但这对我不起作用。

    let testline = MKPolyline()
    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 line = MKPolyline.init(points: &testcoords, count: testcoords.count)
    
    mapView.add(testline)
    

我不断收到"& is not allowed passing array value as 'UnsafePointer" argument"

怎么了



1> OOPer..:

1。

MKPolyLine是一个类,其中包含多个地图坐标以定义折线的形状,非常接近坐标数组。 MKPolyLineView是一个视图类,用于管理的视觉表示MKPolyLine。正如凯恩·柴郡(Kane Cheshire)的回答中所述,它已过时,您应该使用MKPolyLineRenderer

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

您需要同时使用MKPolyLine和,MKPolyLineRenderer如下面的代码所示。


2。

MKPolyLine 有两个初始化器:

init(points: UnsafePointer, count: Int)

init(coordinates: UnsafePointer, count: Int)

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

(或者,您可以创建的数组MKMapPoint并将其传递给init(points:count:)。)

而且,当您要将不可变数组(用声明let)传递给UnsafePointer(非可变)时,则无需添加prefix &


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

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()
    }

}


推荐阅读
author-avatar
汽车一族coolboy_518
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有