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

在Swift中动态修改位置背景更新,swift,Swift,我正在开发一个iOS应用程序,它使用用户的位置并存储他们的路径。除了在使用应用程序时请求用户使用其位置的权限,以及启用后台更新后,我似乎无法停止位置更新,除非我强制退出应用程序 我想实现的是,当用户第一次启动应用程序时,我会得到他们的位置并更改相机的位置。然后,如果用户按下“开始”按钮,则会启用后台位置更新,但如果用户未按下“开始”按钮而将应用程序置于后台,则不会跟踪后台位置更新 我打印的开始和结束,但我仍然需要退出应用程序停止位置更新 override func viewDidLoad() {

我正在开发一个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")
    }
}

谢谢:)

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

谢谢,但不确定这是否有效。如果我注册后台更新,无论我是否已启动或停止位置更新,当应用程序位于后台时,我仍然会在应用程序顶部看到蓝色条。除了前面的答案,您的问题可能是您没有使用相同的locationManager,尝试将其设置为静态,并在应用程序委托和映射类中调用相同的函数。