如何使用 CLCircularRegion SWIFT 设置区域?地理围栏

How set a region using CLCircularRegion SWIFT? Geofencing

我在 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)
}

您实际上并没有在任何地方开始监控。您请求授权,但实际上并未处理该请求的成功(或失败!)。

您可以(部分)通过监控授权成功来做到这一点:

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 内部请求授权,从 didStartMonitoring 内部调用 startMonitoring 可能会很快导致精神错乱:)