iOS swift Location Manager未正确更新

时间:2016-06-16 10:59:05

标签: ios swift

我正在使用CLLocationManager来获取用户位置。我需要在移动时更新用户位置。我正在使用此代码:

import UIKit

import CoreLocation

class ViewController: UIViewController, CLLocationManagerDelegate {

    private var locationManager = CLLocationManager()
    lazy var locations = [CLLocation]()
    var op:String = ""
    @IBOutlet weak var resultTxt: UITextView!

    @IBAction func Start(sender: AnyObject) {
        startLocationManager()
        showResult()
    }
    override func viewDidLoad() {
        super.viewDidLoad()
    }

    func startLocationManager(){
        locationManager.delegate = self
        locationManager.allowsBackgroundLocationUpdates = true
        locationManager.distanceFilter = kCLDistanceFilterNone
        locationManager.pausesLocationUpdatesAutomatically = false
        locationManager.desiredAccuracy = kCLLocationAccuracyBest
        locationManager.requestWhenInUseAuthorization()
        locationManager.requestAlwaysAuthorization()
        locationManager.startUpdatingLocation()
    }

    func startLocationTracking() {
        NSLog("startLocationTracking")
        if CLLocationManager.locationServicesEnabled() {
            switch(CLLocationManager.authorizationStatus()) {
            case .NotDetermined, .Restricted, .Denied:
                print("No access")
                self.startLocationManager()
            case .AuthorizedAlways, .AuthorizedWhenInUse:
                NSLog("authorizationStatus authorized")
            }
        } else {
            print("Location services are not enabled")
            self.startLocationManager()
        }
    }

    func locationManager(manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
        for location in locations {
            let howRecent = location.timestamp.timeIntervalSinceNow

            if abs(howRecent) < 10 && location.horizontalAccuracy < 20 {
                //update distance
                self.locations.append(location)
                showResult()
            }
        }
    }

    func showResult(){
        let currentDate = NSDate()
        let res:String = "Result LAT : \(self.locations.last?.coordinate.latitude) AND LNG : \(self.locations.last?.coordinate.longitude)  Time : \(currentDate.toShortTimeString()) \n "
        op += res
        self.resultTxt.text = op
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
    }

}

我已经在.plist中添加了NSLocationAlwaysUsageDescriptionNSLocationWhenInUseUsageDescription。 这段代码第一次运行正常。但是当用户移动“didUpdateLocations”时没有被解雇。 任何人都可以帮助我,我做错了什么?

1 个答案:

答案 0 :(得分:0)

尝试添加这些行,以便在用户移动时监控重要的位置更改:

locationManager.startMonitoringSignificantLocationChanges()
locationManager.distanceFilter = 300 //value is up to you