включить и отключить местоположение с помощью UISwitch в Swift 4 - PullRequest
0 голосов
/ 10 мая 2018

Я работаю над картами Google, в которых я хочу показать местоположение на картах Google, используя UISwitch. Я могу показать местоположение с помощью кнопки Google Maps, но я не знаю, как мне это сделать, используя UISwitch. Как вы можете видеть на моем первом изображении, я могу получить местоположение, но как я могу сделать это, используя UISwitch (я использую MFSideMenu) для отображения бокового меню. Любая помощь?

enter image description here enter image description here

         override func viewDidLoad() {
    super.viewDidLoad()


    setupSwitch()

    locManager = CLLocationManager()
    locManager.delegate = self
    locManager.requestWhenInUseAuthorization()
    locManager.startMonitoringSignificantLocationChanges()

    func locationManager(_ manager: CLLocationManager, didFailWithError error: Error) {
        print("Error while getting location\(error)")
    }



}

func setupSwitch() {
    locationSwitch.addTarget(self, action: #selector(switchValueDidChange(_:)), for: .valueChanged)
}
        @objc func switchValueDidChange(_ sender: UISwitch) {
    //Called when yourSwitch change its value
    if locationSwitch.isOn {
         menuContainerViewController.toggleLeftSideMenuCompletion({
    //self.locManager.startUpdatingLocation()

              })
    } else {
        //Stops the location updates.
        self.locManager.stopUpdatingLocation()
    }
}

   private func locationManager(manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {

    let location = locations.last

    _ = GMSCameraPosition.camera(withLatitude: (location?.coordinate.latitude)!, longitude: (location?.coordinate.longitude)!, zoom: 17.0)


    //Finally stop updating location otherwise it will come again and again in this delegate
    self.locManager.stopUpdatingLocation()

}

Это код, который я написал, но, кажется, он не работает

1 Ответ

0 голосов
/ 10 мая 2018

UISwitch - это UIControl объект, поэтому в документации Apple говорится:

Элементы управления используют механизм target-action для сообщения интересных событий происходит с вашим кодом.

Вам необходимо использовать метод addTarget (_: action: for:) и использовать событие valueChanged .

В вашем случае ваш код может выглядеть примерно так:

     func setupSwitch {
       yourSwitch.addTarget(self, action: #selector(switchValueDidChange(_:)), for: .valueChanged)
     }

     func switchValueDidChange(_ sender: UISwitch) {
         //Called when yourSwitch change its value
        if locationSwitch.isOn {
             //Starts tracking the user's current location.
             self.locManager.startUpdatingLocation()
        } else {
             //Stops the location updates.
             self.locManager.stopUpdatingLocation()
        }      
     }

Также вы можете установить действие valueChanged из файла .xib .

...