SJHLocationManager 类实现了 CLLocationManager 的单例子类,利用位置数据来处理进入和退出区域。标准区域处理在大区域中效果最佳,但在小区域内则有些不足。
在Apple 文档中有几点需要注意。1. 区域监控从注册后立即开始。但是,不要期望立即接收到事件。只有边界穿越可以生成事件。因此,如果在注册时用户的位置已经在区域内,位置管理器不会生成事件。相反,您必须等待用户穿越区域边界,然后在生成事件并发送到代理之前等待。2. 具体来说,用户的位置必须穿越区域边界,远离边界至少一段距离,在该距离至少保持20秒后才会报告通知。3. 可以假定最小距离大约为200米。4. 如果没有更早,应用程序可以期望在3到5分钟内收到相应的区域进入或区域退出通知。
为了便于更精确的区域监控,每次位置更新时都会检查添加用于监控的任何区域。为了便于及时更新区域,一个 NSTimer
被安排。间隔由 SJHLocationManager
的 setTimerInterval:
方法确定。
一对一 | 一对多 |
---|---|
协议/委托 | 通知 |
当位置事件发生时,可以通过委托传递给一个类,或者通过 NSNotificationCenter
广播。
SJHLocationManager 实现了 CLLocationManagerDelegate 方法。如果设置了 SJHLocationManager.delegate
,则调用其相应的方法。否则,当调用委托方法时,在默认中心使用相应的通知名称常量向 [NSNotificationCenter defaultCenter]
发布通知。
通过以下方式接收通知:
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(requestFinishedHandler:) name:kLocationManagerDidUpdateLocation object:nil];
当前,仅支持 CLCircularRegion 对象进行区域跟踪。
James Heller,[email protected]
SJHLocationManager项目根据MIT许可协议提供。更多详情请查阅LICENSE文件。