Как нарисовать маршрут пользователя в MapView - PullRequest
0 голосов
/ 28 июня 2018

Как я могу нарисовать маршрут пользователя в `mapView? Моя карта работает, но маршрут не рисует. Нет ошибок Например: Маршрут пользователя

Мой код:

class ViewController: UIViewController, CLLocationManagerDelegate, MKMapViewDelegate {

    @IBOutlet weak var mapView: MKMapView!


    var locationManager: CLLocationManager!

    override func viewDidLoad() {
        super.viewDidLoad()
        locationManager = CLLocationManager()
        locationManager.desiredAccuracy = kCLLocationAccuracyBest
        locationManager.delegate = self



            locationManager.requestAlwaysAuthorization()
            locationManager.requestWhenInUseAuthorization()

        locationManager.startUpdatingLocation()
        locationManager.startUpdatingHeading()

        mapView.delegate = self
        mapView.showsUserLocation = true
        mapView.mapType = MKMapType(rawValue: 0)!
        mapView.userTrackingMode = MKUserTrackingMode(rawValue: 2)!
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }

    func locationManager(manager: CLLocationManager!, didUpdateToLocation newlocation: CLLocation!, fromLocation oldLocation: CLLocation!) {
        print("present location : \(newlocation.coordinate.latitude), \(newlocation.coordinate.longitude)")
        if let oldLocationNew = oldLocation as CLLocation?{
            let oldCoordinates = oldLocationNew.coordinate
            let newCoordinates = newlocation.coordinate
            var area = [oldCoordinates, newCoordinates]
            var polyline = MKPolyline(coordinates: &area, count: area.count)
            mapView.add(polyline)
        }
    }

    func mapView(_ mapView: MKMapView, rendererFor overlay: MKOverlay) -> MKOverlayRenderer {
            let pr = MKPolylineRenderer(overlay: overlay)
            pr.strokeColor = UIColor.red
            pr.lineWidth = 5
        return pr
    }


}

Но это не работает.

1 Ответ

0 голосов
/ 29 июня 2018

Я полагаю, вы использовали следующий делегат для получения последней позиции?

func locationManager(manager: CLLocationManager!,
                     didUpdateToLocation newlocation: CLLocation!,
                     fromLocation oldLocation: CLLocation!) {

Упомянутый выше делегат устарел в iOS 6. Теперь следует использовать следующее:

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

Чтобы получить последнюю позицию, просто получите последний объект массива:

locations.lastObject

Попробуйте нарисовать маршрут пользователя с помощью следующего кода:

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

    guard let oldLocation = oldLocation else {
        // Save old location
        self.oldLocation = newLocation
        return
    }

    let oldCoordinates = oldLocation.coordinate
    let newCoordinates = newLocation.coordinate
    var area = [oldCoordinates, newCoordinates]
    let polyline = MKPolyline(coordinates: &area, count: area.count)
    mapView.add(polyline)

    // Save old location
    self.oldLocation = newLocation
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...