iOS CoreLocation 的使用

作者: zenRRan | 来源:发表于2016-08-16 11:35 被阅读249次

    CoreLocation

    一次定位


        一次定位一般用于非地图应用,比如饿了么,51offer等APP只需要知道目前的位置即可。

    1.导入CoreLocation.framework

    2.代码

    常理,导入头文件#import<CoreLocation/CoreLocation.h>并添加代理<CLLocationManagerDelegate>

    添加一个属性@property (nonatomic,strong)  CLLocationManager *locationManager//基本功能都在CLLocationManager类里面

    初始化                                                                                                 self.locationManager = [CLLocationManager new];                    self.locationManager.delegate = self;

    在iOS8.0之后必须要调用的两种方法之一:requestWhenInUseAuthorization(授权用于一次定位)和requestAlwaysAuthorization(授权用于多次定位)并配置plist文件

                   

    这个配置不用死记,百度即可。右面的是说明(根据想要提示的信息写),在授权的时候显示

    之后调用开始定位方法 startUpdatingLocation

    这里所有代码为:

    self.locationManager = [CLLocationManager new];

    self.locationManager.delegate = self;

    [self.locationManager requestWhenInUseAuthorization];

    //    [self.locationManager requestAlwaysAuthorization];//二者选一

    [self.locationManager startUpdatingLocation];

    接下来调用代理方法                                                                                                            -(void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray*)locations;

    可打印当前位置信息在此类中:

    CLLocation *location = locations[0];

    NSLog(@"latitude = %f,longitude = %f",location.coordinate.latitude,location.coordinate.longitude);

    这样写会不断调用位置信息,这里根据需要,在此类中加入进行停止更新位置信息的方法:

    [self.locationManager stopUpdatingLocation]//这样不会重复更新,但是还是会出现2or3此位置更新QAQ

    补充:

    1.requestWhenInUseAuthorization&requestAlwaysAuthorization是iOS8.0之后才有的,因此完整的代码应该有判断设备版本:

    a.直接判断设备版本

    if([UIDevice currentDevice].systemVersion.floatValue >= 8.0){

    [self.locationManager requestWhenInUseAuthorization];

    //    [self.locationManager requestAlwaysAuthorization];

    }

    b.判断能不能执行iOS8.0之后的方法

    if([self.locationManager respondsToSelector:@selector(requestWhenInUseAuthorization)]){

    [self.locationManager requestWhenInUseAuthorization];

    //    [self.locationManager requestAlwaysAuthorization];

    }

    2.一次定位在8.0版本后也可在后台持续更新,其方法为:

    self.locationManager.allowsBackgroundLocationUpdates = YES;

    这样即使回到home,也会更新,只不过屏幕上方会有蓝色提示:

    3.iOS8之后,requestWhenInUseAuthorization&requestAlwaysAuthorization也可在setting里选择 privacy ->location services -> 选择APP进行具体选择

    多次定位

    主要应用于需要时时定位的APP,比如百度地图,高德地图,时时跟踪等APP。基本代码一次定位差不多,但也有些不同。

    基本改动为[self.locationManager requestAlwaysAuthorization];

    把代理方法中的stopUpdatingLocation删掉

    这样就能持续不断的更新当前位置信息。但是这样有个致命的缺点对于手机来说,就是耗电问题!能从软件方向解决就不要省代码。下面就来介绍省电模式代码:

    1.位置筛选器 -->  当位置发生一定的改变之后再调用代理方法 --> 降低代理方法的调用,省电

    [self.locationManager setDistanceFilter:10];

    2.设置精准度--> 降低通讯之间的计算, 达到省电的目的

    self.locationManager.desiredAccuracy = kCLLocationAccuracyBest;

    这里的值可以根据不同的需求来赋值:

    extern const CLLocationAccuracy kCLLocationAccuracyBestForNavigation __OSX_AVAILABLE_STARTING(__MAC_10_7,__IPHONE_4_0);

    extern const CLLocationAccuracy kCLLocationAccuracyBest;

    extern const CLLocationAccuracy kCLLocationAccuracyNearestTenMeters;

    extern const CLLocationAccuracy kCLLocationAccuracyHundredMeters;

    extern const CLLocationAccuracy kCLLocationAccuracyKilometer;

    extern const CLLocationAccuracy kCLLocationAccuracyThreeKilometers;

    相关文章

      网友评论

      • 王韩峰:不错不错 学习了
        zenRRan:@王韩峰 🤔一起奋斗,愿团队越走越远!!
        王韩峰:@王韩峰 不敢当一起学习
        zenRRan:@王韩峰 以后还望大腿指点江山QAQ

      本文标题:iOS CoreLocation 的使用

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