我正在制作谷歌地图,我希望使用UISwitch
在谷歌地图上显示该地点。我可以使用谷歌地图按钮显示位置,但我不知道如何使用UISwitch
。正如你在我的第一张照片中看到的那样,我能够获得位置,但是如何使用UISwitch
(我正在使用MFSideMenu
)来显示侧面菜单。有帮助吗?
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()
}
这是我写的代码,但似乎无法正常工作
答案 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
操作。