Уменьшите частоту обновления менеджера местоположения - PullRequest
0 голосов
/ 15 марта 2019

Есть ли способ уменьшить количество обновлений locationManager?В настоящее время обновляется более 100 раз за 30 секунд!Мое приложение собирает координаты пользователя и передает его в базу данных, но я собираю слишком много координат.

Можно ли уменьшить количество раз, когда приложение обновляет местоположение пользователя?

 func locationManager(_ manager: CLLocationManager, didUpdateLocations 

locations: [CLLocation]) {

            let lat = LocationManager.sharedInstance.location.coordinate.latitude
            let long = LocationManager.sharedInstance.location.coordinate.longitude
}

1 Ответ

1 голос
/ 16 марта 2019

Использовать CLLocationManager 's distanceFilter свойство.

import UIKit
import MapKit
import CoreLocation

class ViewController: UIViewController, MKMapViewDelegate, CLLocationManagerDelegate {
    // MARK: - Variables
    let locationManager = CLLocationManager()

    // MARK: - IBOutlets
    @IBOutlet weak var mapView: MKMapView!

    // MARK: - IBAction

    // MARK: - Life cycle
    override func viewDidLoad() {
        super.viewDidLoad()

        /* delegate */
        mapView.delegate = self
        locationManager.delegate = self
        locationManager.requestWhenInUseAuthorization()
    }

    override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated)

        /* checking location authorization */
        checkLocationAuthorizationStatus()

        if CLLocationManager.locationServicesEnabled() {
            locationManager.startUpdatingLocation()
            locationManager.allowsBackgroundLocationUpdates = true
            locationManager.pausesLocationUpdatesAutomatically = false
            locationManager.desiredAccuracy = kCLLocationAccuracyBest
            locationManager.distanceFilter = 20.0 // 20.0 meters
        }
    }

    // MARK: - Authorization
    func checkLocationAuthorizationStatus() {
        if CLLocationManager.authorizationStatus() == .authorizedWhenInUse || CLLocationManager.authorizationStatus() == .authorizedAlways {

        } else {
            locationManager.requestWhenInUseAuthorization()
        }
    }

    // MARK: - CLLocationManager delegate methods
    func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
        guard let mostRecentLocation = locations.last else {
            return
        }

        print(mostRecentLocation)
    }
}
...