城市定位/城市选择

作者: 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

    相关文章

      网友评论

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

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