【发布时间】:2017-04-18 12:18:14
【问题描述】:
这是我实现谷歌地图和CLLocationManager的代码:
class MapViewController: UIViewController {
@IBOutlet weak var MapView: GMSMapView!
var locationmanager = CLLocationManager()
override func viewDidLoad() {
super.viewDidLoad()
locationmanager.delegate = self
locationmanager.requestWhenInUseAuthorization()
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}
}
extension MapViewController: CLLocationManagerDelegate {
private func locationManager(manager: CLLocationManager, didChangeAuthorizationStatus status: CLAuthorizationStatus) {
print("didChangeAuthorizationStatus")
if status == .authorizedWhenInUse {
locationmanager.startUpdatingLocation()
MapView.isMyLocationEnabled = true
MapView.settings.myLocationButton = true
}
}
func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
print("didUpdateLocations")
if let location = locations.first {
MapView.camera = GMSCameraPosition(target: location.coordinate, zoom: 15, bearing: 0, viewingAngle: 0)
locationmanager.stopUpdatingLocation()
}
}
}
点击允许或不允许后didChangeAuthorizationStatus 从未调用
【问题讨论】:
-
不是很精通 Swift(我更喜欢 Objective-C 的人),但是
private限定符在这里不是不明智的吗? -
@jcaron 绝对。私有方法不会暴露给 Objective-C,因此也不会暴露给核心位置。这是一个可选方法,因此编译器不会抱怨(尽管它应该是 IMO)。
-
@Amir_P 完成。谢谢=)
标签: ios swift cllocationmanager