Как установить регион с помощью CLCircularRegion SWIFT?Geofencing - PullRequest
0 голосов
/ 27 августа 2018

Я работаю с CoreLocation в SWIFT и хочу создать географический регион, в котором я смогу увидеть, находится ли пользователь в правильном месте.Пример, если пользователь находится по этой координате: 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)
}

1 Ответ

0 голосов
/ 28 августа 2018

На самом деле вы нигде не начинаете мониторинг. Вы запрашиваете авторизацию, но на самом деле не обрабатываете успех (или неудачу!) Этого запроса.

Вы можете (частично) сделать это, отслеживая успешность авторизации:

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 может быстро привести к безумию:)

...