在Swift中动态修改位置背景更新

时间:2015-06-30 06:25:53

标签: swift

我正在开发一个使用用户位置并存储其路径的iOS应用。我有一切正常工作,除非我在使用应用程序时请求用户使用其位置的权限,并且启用了后台更新后,除非我强行退出应用程序,否则我似乎无法停止位置更新。

我想要实现的是当用户首次启动应用程序时,我会获得他们的位置并更改相机位置。然后,如果用户按下开始按钮,则启用后台位置更新,但是如果他们将应用程序放入后台而不按下开始位置,则不会跟踪更新。

我在开始和结束时都打印,但我仍然需要退出应用程序以停止位置更新。

override func viewDidLoad() {
    super.viewDidLoad()

    locationManager.delegate = self
    locationManager.pausesLocationUpdatesAutomatically = true
    locationManager.desiredAccuracy = kCLLocationAccuracyNearestTenMeters;
    locationManager.distanceFilter = 0;
    locationManager.requestWhenInUseAuthorization()
}

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

func locationManager(manager: CLLocationManager!, didChangeAuthorizationStatus status: CLAuthorizationStatus) {
    if status == .AuthorizedWhenInUse {
        locationManager.startUpdatingLocation()
        viewMap.myLocationEnabled = true
        viewMap.settings.myLocationButton = true
        println("Location updated and started")
    }
}

func locationManager(manager: CLLocationManager!, didUpdateLocations locations: [AnyObject]!) {
    if let location = locations.first as? CLLocation {

        viewMap.camera = GMSCameraPosition(target: location.coordinate, zoom: 15, bearing: 0, viewingAngle: 60)
        locationManager.stopUpdatingLocation()
        println("Location updated and stopped")
    }
}

谢谢:)

1 个答案:

答案 0 :(得分:0)

在视图控制器中,注册通知UIApplicationDidEnterBackground,当发生这种情况时,检查用户是否按下了开始按钮(将状态值存储在变量中),如果没有,则访问位置管理器对象并调用stopUpdatingLocation。