CLBeaconRegion
是的,您可以根据用户所在的位置停止监控。 但是正如您所发现的,center
该对象的属性不会帮助您做到这一点(请参阅@Daij-Djan 的答案以了解原因。)
您想要的典型方法是在设置信标监控的同时设置接收重大位置更改,CLLocationManager
如下所示:
[locationManager startMonitoringSignificantLocationChanges];
delegate
然后,您CLLocationManager
可以在每次用户显着更改位置时将如下方法添加到您的方法中以获取回调:
- (void)locationManager:(CLLocationManager *)locationManager
didUpdateLocations:(NSArray *)locations {
CLLocation* location = [locations lastObject];
NSLog(@"latitude %+.6f, longitude %+.6f\n",
location.coordinate.latitude,
location.coordinate.longitude);
// TODO: change the monitored beacon regions depending on the
// location.coordinate.latitude and location.coordinate.longitude
}
}
请注意,您还需要确保您的应用程序已授权定位服务以使其正常工作,并将与NSLocationAlwaysUsageDescription
密钥对应的字符串放入您的 plist 中,但无论如何您都需要执行相同的检查来监控信标:
if([locationManager respondsToSelector:@selector(requestAlwaysAuthorization)]) {
[locationManager requestAlwaysAuthorization];
}
有关重大位置更改的更多详细信息,请参见此处: https ://developer.apple.com/library/ios/documentation/UserExperience/Conceptual/LocationAwarenessPG/CoreLocation/CoreLocation.html