iOS开发之定位

640?wx_fmt=jpeg

黑客技术 点击右侧关注,了解黑客的世界! 640?wx_fmt=jpeg

640?wx_fmt=jpeg

Java开发进阶 点击右侧关注,掌握进阶之路! 640?wx_fmt=jpeg

640?wx_fmt=jpeg

Linux编程 点击右侧关注,免费入门到精通! 640?wx_fmt=jpeg


者丨 YungFan
https://www.jianshu.com/p/022d7f58f9db


在iOS开发中,定位是很多App都需要使用的功能。 本文主要对iOS中的定位知识点进行介绍。 本文代码环境为: Xcode 10.1 + Swift 4.2。


一、模块与常见类

  • 定位所包含的类都在CoreLocation模块中,所以必须导入import CoreLocation
  • CLLocation:表示某个位置的地理信息,比如经纬度、海拔等
  • CLLocationManager:定位管理器,可以理解为定位不能自己工作,需要有个管理者对它进行全过程监督。
  • CLGeocoder:地理编码,分为两种
    • 正向地理编码:根据位置信息,获取具体的经纬度等信息
    • 反向地理编码:根据给定的经纬度等信息,获取位置信息
  • CLPlacemark:位置信息,包含的信息如国家、城市、街道等
  • CLLocationManagerDelegate:定位代理,不管是定位成功与失败,都会有相应的代理方法回调
  • 具体的工作流程
    (1)CLLocationManager发起定位,定位成功或者失败都会回调CLLocationManagerDelegate中相应的代理方法
    (2)在成功的代理方法中获取 CLLocation 对象,进而获取经纬度
    (3)通过 CLGeocoder获取经纬度对应的位置信息CLPlacemark
    (4)通过CLPlacemark获取具体的位置信息

二、权限

在iOS中,隐私保护特别好,凡事需要定位的时候,第一次必须弹出对话框给用户选择,一共有两种权限


  • 使用时才定位权限,使用这种,必须走两步
    (1)程序中发起 requestWhenInUseAuthorization
    (2)在info.plist对应的位置写明申请权限的具体原因
  • 一直可以定位权限,使用这种,也是两步
    (1)程序中发起 requestAlwaysAuthorization
    (2)在info.plist对应的位置写明申请权限的具体原因


640?wx_fmt=other 权限原因填写
注意: 上架的App这个原因必须写明确

三、模拟器定位

由于定位需要GPS,所以一般情况下,都需要真机进行测试,笔者在教学过程中,经常使用的是一种模拟定位,这种定位需要准备一个gpx 的文件,可以取名 XXX.gpx,里面的内容如下:


 
 


将自己的定位信息填写进xml对应的位置即可,然后选择Edit Scheme,在Options中选择自己的gpx 的文件,这样模拟器运行的时候就会读取该文件的位置信息。


640?wx_fmt=other Edit Scheme


四、后台定位

如果你的App需要后台定位,可以这样做,首先在Capabilities中打开后台模式


640?wx_fmt=other 后台模式


前面说过定位权限分两种,针对这两种情况,后台定位的代码不一样,效果也不一样


  • 使用时才定位权限需要加上locationManager.allowsBackgroundLocationUpdates = true
    开启后台定位,而一直可以定位权限不需要写任何额外代码
  • 使用时才定位权限退出后,手机顶部会有蓝条提示,而一直可以定位权限则没有


640?wx_fmt=other 后台定位蓝条提醒


五、开发步骤与示例代码


  1. 导入CoreLocation模块
  2. 创建CLLcationManager对象,设置参数和代理,请求定位授权并配置info.plist
  3. 调用CLLcationManager对象的startUpdatingLocation方法进行定位
  4. 实现代理方法,在定位成功的方法中进行位置信息的处理



六、代码运行效果运行效果

640?wx_fmt=gif 运行效果


 推荐↓↓↓ 

640?wx_fmt=jpeg

?16个技术公众号】都在这里!

涵盖:程序员大咖、源码共读、程序员共读、数据结构与算法、黑客技术和网络安全、大数据科技、编程前端、Java、Python、Web编程开发、Android、iOS开发、Linux、数据库研发、幽默程序员等。

640?wx_fmt=png万水千山总是情,点个 “ 在看” 行不行
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值