iOS 系统自带地图 基本实现

2 篇文章 0 订阅
CLLocationManager
 首先,来讲一下CLLocationManager,因为,有人明天要用到,临时写的。
 那么怎么使用呢?
 首先需要定义一个CLLocationManager的属性,因为定位是一个全局性的。
 那么接下来的代码,是可以写到你需要使用到地图的那个模块所对应的工具类或者ViewController类。
第一步:创建一个CLLocationManager实例;
    //初始化CLLocationManager属性
    self.locationManager = [[CLLocationManager alloc]init];
第二步:在iOS 8.0之后需要进行某些操作,因为苹果对于安全性的强调实在是太高了,所以,你懂的;
    //判断系统版本
    if ([[UIDevice currentDevice].systemVersion floatValue] > 8.0) {

        //设置授权方式
        [self.locationManager requestWhenInUseAuthorization];

        //用户是否允许位置访问
        [CLLocationManager locationServicesEnabled];

    }
上面的授权方式需要注意:
requestWhenInUseAuthorization----是设置当使用的时候才定位;
requestAlwaysAuthorization-----是设置一直都允许定位。
当然还不止,这里设置的授权方式,需要跟我们在info.plist中设置一致。
跟requestWhenInUseAuthorization配对使用

这里写图片描述

跟requestAlwaysAuthorization配对使用

这里写图片描述

第三步:在iOS 9.0 后又需要安全性检测,虽然这样看似很麻烦,但真的很麻烦。不过,对于用户角度来说,安全性真的是蛮靠谱的。
    //iOS9新特性
    if ([[[UIDevice currentDevice] systemVersion] floatValue] > 9.0) {
        //允许后台更新
        _locationManager.allowsBackgroundLocationUpdates = YES;
    }
第四步:设置代理即可;
self.locationManager.delegate = self;
第五步:对于定位功能,需要开启定位功能;
[self.locationManager startUpdatingLocation];
第六步:对于定位来说,是需要设置更新间距的,测试阶段可以把这个值调小一点,比如5米,但是,一旦产品上线,需要把该值设置到500-1000这么一个范围;
self.locationManager.distanceFilter = 500;
第七步:还记得设置代理那一步,我们还没有遵循协议勒,遵循的协议名:CLLocationManagerDelegate
第八步:当然就是实现,协议内的方法咯;
//这个方法里,我们要使用到的就是locations,注意这个是一个数组。
//因为这个方法,在用户更新位置的时候,会执行多次,为什么会执行多次呢?因为采用定位的时候,会在位置更新的位置附近多取几个点,最终取出一个准确点。
-(void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray<CLLocation *> *)locations;
上面的那个方法中,要注意到locations这个数组是一个CLLocation,这个CLLocation类,苹果在底层已经帮我们获取到了当前用户位置的所有信息,并已经存在在这个locations数组中。
于是我们可以拿出数组中的最后一个元素,得到我们想要的信息。
之后,我们就要涉及到一个地理反编码技术,也就是通过经纬度得到具体位置的实际信息。
//获取最新位置
CLLocation *currentLocation = [locations lastObject];

//根据最新位置,进行地理反编码
CLGeocoder *gecoder = [CLGeocoder new];


[gecoder reverseGeocodeLocation:currentLocation completionHandler:^(NSArray<CLPlacemark *> * _Nullable placemarks, NSError * _Nullable error) {

    //获取用户当前位置信息
    NSString *userLocationInfo = [[placemarks lastObject] name]; 
}

当然在这个CLPlaceMark类里,有很多我们需要的信息,比如,
    街道号-----thoroughfare
    位置-------name
    国家-------country
    等等之类的,你可以在敲一个demo的时候,自己点CLPlaceMark类进去看一看。
以上就是关于CLLocationManager类的简单使用。
当然,在我们U轨迹项目中,使用到的后台定位功能的具体实现细节还有很多,在下一篇,我将详细讲到如何实现真正的后台定位。
若有不到的地方,还请指正。
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值