在Swift 4中使用UISwitch启用和禁用位置

时间:2018-05-10 11:19:49

标签: ios swift google-maps navigation swift4

我正在制作谷歌地图,我希望使用UISwitch在谷歌地图上显示该地点。我可以使用谷歌地图按钮显示位置,但我不知道如何使用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 :(得分:2)

UISwitch是一个UIControl对象,正如Apple的文档所说:

  

控件使用目标操作机制来报告有趣的事件   发生在您的代码中。

您需要使用的方法是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()
        }      
     }

您也可以从 .xib 文件中设置valueChanged操作。