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 を参照して ください。