Swift 4 locationManager didEnterRegion在应用程序启动时当用户处于区域中时不会触发



我正在尝试检测用户是否正在我的应用程序中输入特定区域。

如果用户在应用程序启动并进入特定区域时不在该区域,则此操作效果良好。

但如果应用程序启动时用户在特定区域,则不会触发"didEnterRegion"功能。

这是我的代码:

override func viewDidLoad() {
super.viewDidLoad()
self.dbRef = Database.database().reference()
self.mapView.delegate = self
self.initLocationManager()
guard let userLocation = locationManager.location?.coordinate else {return}
self.userLocation = userLocation
let region = MKCoordinateRegion(center: userLocation, latitudinalMeters: 1200, longitudinalMeters: 1200)
mapView.setRegion(region, animated: true)
self.getPlaces { (places) in
self.places = places
self.addAnnotationsToMap(places)
if(CLLocationManager.authorizationStatus() == .authorizedAlways){
if CLLocationManager.isMonitoringAvailable(for: CLCircularRegion.self){
for place in places{
self.startMonitoring(place)
}
}
}
}
}
func startMonitoring(_ place: Place){
let region = CLCircularRegion(center: place.getCoordinate(), radius: 50, identifier: place.identifier)
region.notifyOnEntry = true
region.notifyOnExit = true
locationManager.startMonitoring(for: region)
}
func locationManager(_ manager: CLLocationManager, didEnterRegion region: CLRegion) {
print("Entered Region : (region.identifier)")
}

这是预期的行为,顾名思义,它只在区域更宽的交叉点触发。如果您想确定用户是在区域内还是在区域外,请使用locationManager.requestState(for region: CLRegion),然后在委托函数locationManager(_:didDetermineState:for:)中接收结果

要查询所有监控区域,请为locationManager.monitoredRegions中的每个对象调用requestState(region)

最新更新