《iOS组件与框架——iOS SDK高级特性剖析》——第2章,第2.6节地理围栏
本节书摘来自异步社区《iOS组件与框架——iOS SDK高级特性剖析》一书中的第2章,第2.6节地理围栏,作者 【美】Kyle Richter , Joe Keeley,更多章节内容可以访问云栖社区“异步社区”公众号查看
2.6 地理围栏
iOS组件与框架——iOS SDK高级特性剖析
地理围栏(Geofencing)也叫区域监视(regional monitoring),指的是能够知道设备已进入或离开指定的地图区域。iOS在Siri中充分利用了这项功能,使其能够完成类似于下面的任务:“在我离开办公室时提醒我带上面包”;“在我回到家时提醒我将烤肉放进烤箱”。iOS还在Passbook中使用了地理围栏功能,让用户能够在主屏幕上看到相关的凭证(更详细的信息请参阅第24章)。
2.6.1 检查区域监视功能
CLLocationManager有一个类方法,指出设备是否支持区域监视。应用可使用它来决定是否执行区域监视任务,例如,在示例应用的ICFFavoritePlaceViewController中,根据情况决定是否显示一个开关,用于对喜欢的地点启用地理围栏。
2.6.2 定义边界
可使用Core Location位置管理器(CLLocationManager)存储一组应用要监视的区域。在ICFMainViewController中,方法updateMapAnnotations:清除这些被监视的区域。
请注意,当前只能监视圆形区域。
2.6.3 监视变化
设备进入或离开监视区域后,位置管理器将这一点告诉其委托:调用方法locationManager: didEnterRegion:或locationManager:didExitRegion:。
方法locationManager:didEnterRegion:首先获取监视区域的标识符。这个标识符是在让位置管理器对区域进行监视时指定的,它是保存的地点的Core Data URI。使用这个URI来获取托管对象的ID,再使用托管对象ID从托管对象上下文检索喜欢的地点。
要在示例应用中测试这一点,在调试模式下运行这个应用,并使用包含丹佛自然科学博物馆(DMNS)地址的GPX文件,这在2.2.6节介绍过。确保对地点Denver Art Museum启用了地理围栏,如图2.9所示。应用运行后,使用Xcode将位置改为Denver Art Museum,为此可从Default Location下拉列表中选择DMNS,如图2.6所示。这将触发地理围栏事件,进而显示如图2.13所示的提醒框。
图2.13 示例应用FavoritePlaces:提醒用户身处喜欢的地点附近
用户离开监视区域时,将调用方法locationManager:didExitRegion:。这个方法也获取监视区域的Core Data标识符,使用Core Data获取托管对象ID,找出喜欢的地点,再显示一个提醒框,指出用户离开了监视区域。要在示例应用中测试这一点,在图2.13所示的Favorite Nearby提醒框中轻按OK按钮,再在iOS模拟器中选择菜单Debug>Location>Apple。几秒钟后,模拟器将改变模拟位置,并显示一个提醒框,如图2.14所示。
2.14 示例应用FavoritePlaces:提醒用户离开了喜欢的地点
位置管理器有意识地推迟调用委托方法,等到穿越缓冲地带20秒后才这样做,这旨在避免设备接近监视区域时发送虚假消息。
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
Everpad 适应 Uuntu unity 桌面的 Evernote 客户端
Evernote是一款日志云服务软件,支持文本, 图片, 声音事, 并可添加附件,但是官方Evernote 客户端支持 Windows, Mac OSX, Android, iOS 和 WebOS,唯独缺少 Linux 客户端。 在Linux上,我们能使用 NixNote (之前的 Nevernote), 一款非官方的 Evernote 客户端,使用Java 编写,轻量级, 现在你还可以使用这款软件: Everpad, 一款最新的 Evernote 客户端完美支持 Unity 桌面。 https://dn-linuxcn.qbox.me/data/attachment/album/201209/18/125254umh8ccumeiahy6py.png 可以通过官方PPA安装(支持Ubuntu12.10, 12.04 / 11.10.)本人本来想安装截图,但是使用的是ubuntu 10.04,所以无法安装。 打开终端,输入命令: sudo add-apt-repository ppa:nvbn-rm/ppa sudo apt-get update sudo apt-get instal...
- 下一篇
《iOS 6核心开发手册(第4版)》——1.5节秘诀:约束移动
本节书摘来自异步社区《iOS 6核心开发手册(第4版)》一书中的第1章,第1.5节秘诀:约束移动,作者 【美】Erica Sadun,更多章节内容可以访问云栖社区“异步社区”公众号查看 1.5 秘诀:约束移动iOS 6核心开发手册(第4版)本章前面的秘诀中介绍的简单方法的一个问题是:完全有可能把视图拖到屏幕以外的某个位置,用户在那里不能看到或者轻松地恢复它。那些秘诀使用了不受约束的移动,没有检查对象是否保持在视图中并且是可触摸的。秘诀1-4修正了这个问题,它把视图的移动约束在其父视图内。 其实现方式如下:限制每个方向上的移动,并把它的检查拆分到单独的x和y约束中。这种执行两项检查的方法允许视图继续移动,甚至当一个方向超过了它的最大值时也是如此。如果视图碰到了其父视图的(例如)最右边,它仍然可以上下移动。 图1-1显示了一个示例界面。子视图(花朵)被约束进界面中心的黑色矩形中,并且不能拖到视图之外。秘诀1-4的代码是一般性的,可以进行修改,以适应父视图的界限和任何大小的子视图。
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- MySQL8.0.19开启GTID主从同步CentOS8
- SpringBoot2全家桶,快速入门学习开发网站教程
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- CentOS8编译安装MySQL8.0.19
- CentOS7,8上快速安装Gitea,搭建Git服务器
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- SpringBoot2配置默认Tomcat设置,开启更多高级功能