旨在通过将区域限制从20个增加到(理论上)无限来改进 CoreLocation
的区域监控。它还通过处理一些样板式的错误处理,使区域监控体验更加流畅。
QKGeofenceManager
的接口如下
@interface QKGeofenceManager : NSObject<CLLocationManagerDelegate>
@property (nonatomic, weak) id<QKGeofenceManagerDelegate> delegate;
@property (nonatomic, weak) id<QKGeofenceManagerDataSource> dataSource;
@property (nonatomic, readonly) QKGeofenceManagerState state;
+ (instancetype)sharedGeofenceManager;
- (void)reloadGeofences;
@end
它使用dataSource/delegate模式提供CLCircularRegion
数组
@protocol QKGeofenceManagerDataSource <NSObject>
@required
- (NSArray *)geofencesForGeofenceManager:(QKGeofenceManager *)geofenceManager;
@end
以及发送内部/退出事件。
@protocol QKGeofenceManagerDelegate <NSObject>
@optional
- (void)geofenceManager:(QKGeofenceManager *)geofenceManager isInsideGeofence:(CLRegion *)geofence;
- (void)geofenceManager:(QKGeofenceManager *)geofenceManager didExitGeofence:(CLRegion *)geofence;
- (void)geofenceManager:(QKGeofenceManager *)geofenceManager didChangeState:(QKGeofenceManagerState)state;
- (void)geofenceManager:(QKGeofenceManager *)geofenceManager didFailWithError:(NSError *)error;
@end
当用户进入或当前位于地理围栏内时,QKGeofenceManager 调用 geofenceManager:isInsideGeofence:
。当管理者从以下三种状态之一变化时调用 geofenceManager:didChangeState:
: QKGeofenceManagerStateIdle
、QKGeofenceManagerStateProcessing
和 QKGeofenceManagerStateFailed
。
提供的示例允许用户添加地理围栏并在表格视图中显示它们。当按下刷新按钮时,QKGeofenceManager
做其神奇的事情,并确定用户位于哪些地理围栏内。进入和离开地理围栏将相应更新表格视图。
您还可以通过在表格视图中选择它并在地图上拖动标记来编辑地理围栏(默认位于当前位置)。