2015-06-30 2 views
0

Я разрабатываю приложение iOS, которое использует местоположение пользователей и сохраняет их пути. У меня все работает, кроме как после того, как я попрошу разрешения пользователей использовать их местоположение при использовании приложения и когда включены обновления фона, я не могу вообще прекратить обновления местоположения, если я не заставлю выйти из приложения.Динамически изменять обновления фона фона в Swift

Что я хотел бы достичь, когда пользователь сначала запускает приложение, я получаю их местоположение и меняю положение камеры. Затем, если пользователь нажимает кнопку «Пуск», фоновые обновления фона активируются, однако, если они помещают приложение в фоновый режим, не нажимая на начальное местоположение, обновления не отслеживаются.

Я печатаю как начало, так и конец, но мне все равно нужно закрыть приложение, чтобы остановить обновления местоположения.

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") 
    } 
} 

Спасибо :)

ответ

0

В контроллере зрения, регистрация уведомления UIApplicationDidEnterBackground и когда это произойдет, проверьте, является ли пользователь нажал кнопку пуска (сохранить государственное значение в переменной), если нет, то получить доступ к объект диспетчера местоположений и вызов stopUpdatingLocation.

+0

Спасибо, но не уверен, что это работает. Если я регистрируюсь для обновлений фона, независимо от того, начал ли я или остановил обновления местоположения, я все равно получаю синюю полосу в верхней части приложения, когда приложение находится в фоновом режиме. – puks1978

+0

В дополнение к предыдущему ответу может возникнуть проблема, заключающаяся в том, что вы не используете один и тот же диспетчер locationManager, стараясь сделать его статическим и вызывать то же самое как в делетете приложения, так и в вашем классе карты. –

Смежные вопросы