城市定位/城市选择

作者: RichyLeo | 来源:发表于2016-05-19 15:28 被阅读1206次

本文旨在为大家提供“干货”,在文章结尾会提供Demo下载地址。本文内容简单,但实用价值高,有需要的自取,并关注我!大牛可绕行。后续Richy将定期为大家更新...

闲话不多说了,先给大家看效果展示:

本文主要包含内容:

1. CLLocationManager定位功能(重点阐释);

2. CLGeocoder逆地理编码;

3. 城市列表选择功能实现;

CityLocation例子中,大家只需关注以下3个文件的实现就可以了:


一、CLLocationManager定位功能实现

1.1 主要代码实现:

1.1.1 创建位置管理器LocationManager

1.1.2 开启定位

1.1.3 定位成功回调

1.1.4 定位失败回调

1.1.5 UIBackgroundModes开启 Location Updates(容易遗漏)

1.1.6 Info.plist 增加定位描述(容易忽视)

需在info.plist添加NSLocationWhenInUseUsageDescription或NSLocationAlwaysUsageDescription字段

NSLocationWhenInUseUsageDescription表示应用在前台的时候可以搜到更新的位置信息。

NSLocationAlwaysUsageDescription表示应用在前台和后台都可以获取到更新的位置数据,具体配置见下图:

1.2 常常出现的问题,或你忽视的细节

回忆自己刚开发的时候,抑或是目前大家在各大论坛上提出的定位问题,无外乎:1.定位结果的回调方法不执行;2.定位服务是否开启的Alert不显示;3.CLLocationManager怎么实现定位(这个就不说了,直接看Demo内容)。

在遇到上述问题之后,您先核实上文(1.1.5和1.1.6)Info.plist和BackgroundModes有没有设置???

1.2.1 在确定无误后,咱们先看第1个问题-定位回调方法不执行?

可能原因1:LocationManager所创建的实例,写成了局部变量,这样会导致其在定位之前就可能被销毁掉了。故大家要将其声明为成员变量形式,以延长生命周期,具体可参考Demo写法;

可能原因2: 定位服务“假开启”(简单阐释:虽然经过了系统locationServicesEnabled的验证,也调用了-startUpdatingLocation,但最终仍无法定位),这个时候,大家需要在[手机设备-设置-定位服务]中找到该App,确认其开启状态。

其他原因:就需要大家注意代码习惯了,譬如代理(delegate)没有设置,这个就不解释了。如果大家还遇到了一些奇葩状况,不妨给我留言,咱们共同研究。

1.2.2 咱们再看下第2个问题-是否开启定位的Alert不显示?

首先确认,在Info.plist中你所增加的定位描述是仅前台定位(NSLocationWhenInUseUsageDescription)还是持续定位(NSLocationAlwaysUsageDescription)?然后,由于iOS8.0之后,定位需要手动授权。最后,常常出现此状况的原因就是你Info.plist中的描述和请求授权(requestWhenInUseAuthorization/requestAlwaysAuthorization)调用的方法不一致导致的。

Apple官方说明中也有此类似的描述:

1.2.3 多次定位的处理

Demo中给大家提供了一个简单的处理,通过一个BOOL值成员变量(_isLocationed),记录当前定位的状态。

if(!_isLocationed){

     // 对定位到的经纬度处理

     _isLocationed = YES;

};

二、CLGeocoder逆地理编码

说明:所谓的逆地理编码,即通过经纬度坐标得到真实地址的过程;而它的逆过程,称之为地理编码。具体代码的涵义就不多说了,有详细的说明信息。再多说一点,经过逆地理编码得到的信息很多,例子中Richy仅对城市(city)进行了使用,如果你想了解的详细结果,不妨在Demo中,详细查看CLPlacemark的内容。

三、城市列表选择功能

该功能不难理解,重点依然是Richy为大家提供的城市列表的数据cityGroup.plist(需要的自取),其他就是UITableView结合数据源的使用,还有通过Blocks进行数据传值的使用。

四、最后,感谢大家坚持看完本文。您的鼓励和支持是Richy的动力源泉。大家也可扫描下边的二维码,关注Richy的微信公众号,了解Richy的动态。

简书地址:http://www.jianshu.com/users/76e87d7d8887/latest_articles

GitHub:https://github.com/RichyLeo

Demo下载地址:https://github.com/RichyLeo/CityLocation.git

相关文章

  • 城市定位/城市选择

    本文旨在为大家提供“干货”,在文章结尾会提供Demo下载地址。本文内容简单,但实用价值高,有需要的自取,并关注我!...

  • react-native开发实例之城市选择组件

    城市切换对于地域相关的app使用较多,通常结合定位城市、热门城市、最近选择城市和全部城市列表进行列表展示,另外还提...

  • 城市定位

    中国的大城市群有三个北京,上海,广州 北京的定位:在历史上北京就不是以经济为主,而是国土防御为主,现在的中国很多人...

  • iOS-一个城市选择器,与美团选择城市相似 包含定位城市 热门搜

    仿美团选择城市页面。最上面为当前定位城市,下面依次为历史搜索城市,热门搜索城市,以及所有的城市列表。通过fmdb取...

  • 网页知识链接2

    1.Google翻墙 http://hi18.cn/ 2.城市定位/城市选择 http://www.jianshu...

  • 自动定位城市

    虽然城市切换可以由用户自行选择,偶尔客户需要定位用户的当前城市,作为默认城市选项。 大致搜罗了一下, 各地图(高德...

  • 微信小程序全国城市按首字母检索

    最近做在做一个小程序项目,需要用到全国城市列表的选择,然后通过城市的首字母快速定位到要选择的城市,那么今天就记录下...

  • 城市拼音排序、定位当前城市

    使用Masonry自动布局,有搜素条,支持点击字母和滑动字母条更换城市session 效果图 项目demo地址ht...

  • 城市选择

    参考网上一直使用的城市数据,我创建了具有两个表视图的城市选择:第一个表为省份,第二个表是选择某省后的该省下的城市。...

  • 城市选择

    参考: 仿美团城市选择 关于城市选择原理的这篇不错

网友评论

    本文标题:城市定位/城市选择

    本文链接:https://www.haomeiwen.com/subject/udcgrttx.html