Обновить центр экрана с текущим местоположением

Я успешно сделал приложение, которое показывает мигающую синюю точку там, где сейчас находится пользователь. Однако на данный момент центр экрана не следует за синей точкой при перемещении пользователя, поэтому, если пользователь перемещает синюю точку, он просто выходит из экрана, и пользователю придется прокручиваться, чтобы не отставать от нее. Это не удобно для пользователя! У меня есть следующий код:

import UIKit
import MapKit
import CoreLocation

class ViewController: UIViewController, MKMapViewDelegate, CLLocationManagerDelegate {

    @IBOutlet weak var map: MKMapView!

    let locationManager = CLLocationManager()
    var mapp = MKMapView.self

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
        if (CLLocationManager.locationServicesEnabled())
        {
            self.locationManager.delegate = self
            self.locationManager.desiredAccuracy = kCLLocationAccuracyBest
            self.locationManager.requestWhenInUseAuthorization()
            self.locationManager.startUpdatingLocation()
            self.map.showsUserLocation = true
        }
        else
        {
            print("Location services are not enabled")
        }
    }

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

    func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation])
    {
        let location = locations.last
        let center = CLLocationCoordinate2D(latitude: location!.coordinate.latitude, longitude: location!.coordinate.longitude)
        let region = MKCoordinateRegion(center: center, span: MKCoordinateSpan(latitudeDelta: 0.002, longitudeDelta: 0.002))
        self.map.setRegion(region, animated: true)
        self.locationManager.stopUpdatingLocation()
    }
}

Мои единственные мысли, что я мог бы избавиться от раздела "stopUpdatingLocation() и, возможно, тогда он будет постоянно обновлять регион с новым центром для каждого нового местоположения, однако я не уверен, что отсутствие stopUpdatingLocation - плохая практика? Спасибо за всем совет!

1 ответ

Решение

Используйте userTrackningMode, который заставляет представление карты центрировать карту в этом месте и начинать отслеживать местоположение пользователя. Если карта уменьшена, вид карты автоматически увеличивает местоположение пользователя, эффективно изменяя текущую видимую область.

Использовать его

mapView.setUserTrackingMode(.follow, animated:true)
Другие вопросы по тегам