我正在使用SWIFT上的CoreLocation
,并且想要创建一个地理区域,在该区域中可以查看用户是否位于正确的位置。例如,如果用户位于此坐标:Lat: 44.8856828 and Lon: -93.2131653
。我想在他周围设置200
米的区域,以确保数据正确无误,并且用户可以使用200-meter
区域来签入该地方的任何部分。这是我在代码中所要做的!
override func viewDidLoad() {
latLabel.text = latStore
lonLabel.text = lonStore
readData()
regionLocation()
}
//Accessing the are around the user
func regionLocation() {
locationManager = CLLocationManager()
locationManager.delegate = self
locationManager.requestAlwaysAuthorization()
}
func locationManager(_ manager: CLLocationManager, didEnterRegion region: CLRegion) {
print("You enter the place")
}
func locationManager(_ manager: CLLocationManager, didExitRegion region: CLRegion) {
print("Your exit the place")
}
func locationManager(_ manager: CLLocationManager, didStartMonitoringFor region: CLRegion) {
print("Start monitoring")
locationManager.requestAlwaysAuthorization()
let currentRegion = CLCircularRegion(center: (locationManager.location?.coordinate)!, radius: 200, identifier: "Place")
locationManager.startMonitoring(for: currentRegion)
}
答案 0 :(得分:0)
您实际上没有在任何地方开始监视。您请求授权,但实际上不处理该请求的成功(或失败!)。
您可以(部分)通过监视授权成功来做到这一点:
func locationManager(_ manager: CLLocationManager, didChangeAuthorization status: CLAuthorizationStatus) {
if(status == .authorizedAlways) {
let currentRegion = CLCircularRegion(center: (locationManager.location?.coordinate)!, radius: 200, identifier: "Place")
locationManager.startMonitoring(for: currentRegion)
}
}
但是,这不能解决您已经获得授权的情况。您确实应该在请求授权之前检查当前授权状态。
您也确实不想在didStartMonitoring
内部请求授权,而从startMonitoring
内部呼叫didStartMonitoring
可能会很快导致精神错乱:)