ios - 为什么我的Polyline只画点不画线?

标签 ios swift3 mapkit xcode8

enter image description here我在我的 MapKit map 上绘制折线时遇到问题,我应该尝试在用户要去的地方画一条线,问题是当我移动用户的位置时,它只会在新位置绘制一个点但不会追踪完整的线

我已经尝试用起点和起点画线,但它对我不起作用,假设如果用户走路,他的位置会更新,他应该去画线

这是我的方法 didUpdateLocations:

func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {

        if let location = locations.last{
            self.currentLocation = location
            mapKit.centerCoordinate = location.coordinate
            //Validamos si el usuario quiere recordar su ruta
            if SettingsViewController.recordRutaOn{
             points.append(location)
             print("Estamos registrando la ruta del usuario")

            }

            //Prueba para pintar la ruta
            print((locations.last?.coordinate.latitude)!,(locations.last?.coordinate.longitude)!)
            var rutaPoly = CLLocationCoordinate2D(latitude: (locations.last?.coordinate.latitude)!, longitude: (locations.last?.coordinate.longitude)!)
            let polyline = MKPolyline(coordinates: &rutaPoly, count: locations.count)
            mapKit.add(polyline)
                if self.currentLocation == nil{
                self.currentAnnotation = MKPointAnnotation()
                self.currentAnnotation?.coordinate = location.coordinate
                self.mapKit.addAnnotation(self.currentAnnotation!)
            }
        }
    }

这是我的 renderFor 方法:

func mapView(_ mapView: MKMapView, rendererFor overlay: MKOverlay) -> MKOverlayRenderer {

        if overlay is MKPolyline{
            let polyline = overlay
            let polyLineRender = MKPolylineRenderer(overlay: polyline)
            polyLineRender.strokeColor = UIColor.blue
            polyLineRender.lineWidth = 2.0            

            return polyLineRender
        }
        return MKPolylineRenderer()
    }

我不明白我做错了什么,只画了一个点

最佳答案

您已将 rutaPoly 定义为单个 CLLocationCoordinate2D。因此,当您从中创建 MKPolyline 时,只有一个坐标,因此呈现的折线将是一个点。更糟糕的是,您提供给 MKPolylinecount 参数与第一个参数无关,您可以通过这种方式获得一些未定义的行为。

您想保留一个坐标数组并将您的新坐标附加到该数组。像这样的东西:

var coordinates: [CLLocationCoordinate2D] = []
var currentPolyline: MKPolyline?

func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
    guard let location = locations.last else { return }

    coordinates.append(location.coordinate)
    let polyline = MKPolyline(coordinates: coordinates, count: coordinates.count)
    mapView.addOverlay(polyline)
    if let currentPolyline = currentPolyline {
        mapView.removeOverlay(currentPolyline)
    }
    currentPolyline = polyline
}

或者,您可以将每个新的位置更新添加为单独的多段线:

var previousCoordinate: CLLocationCoordinate2D?

func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
    guard let location = locations.last else { return }

    if let previousCoordinate = previousCoordinate {
        let coordinates = [previousCoordinate, location.coordinate]
        let polyline = MKPolyline(coordinates: coordinates, count: coordinates.count)
        mapView.addOverlay(polyline)
    }
    previousCoordinate = location.coordinate
}

但无论您做什么,请确保为 MKPolyline 初始化程序提供了一个 CLLocationCoordinate2D 数组及其相应的 count

关于ios - 为什么我的Polyline只画点不画线?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57342956/

相关文章:

swift - 如何将选取的图像添加到核心数据中

iphone - 使用 MapKit 显示特定区域

ios - Google Vision 是否有面部识别的 Swift 文档

php - 从 PHP 打开 MySQL 数据库时我真的应该使用 localhost 吗?

python - 如何使用 Kivy 免费上传 python 文件到 iPhone?

ios - Swift 3 不正确的初始 UITableViewCell 行高

ios - Xcode/swift/ watch 套件 : Watch Extension unintentionally shows push notification on app launch?

ios - 如何在swift3中用其他元素替换数组的值?

iphone - 使用距位置的距离有效地计算最近的 5 个位置

ios - 如何快速使用来自 reverseGeocodeLocation 的数据?