iOS CoreLocation使用(iOS8 回调不行的问题解决)

来源:互联网 发布:mechanix 知乎 编辑:程序博客网 时间:2024/04/28 15:47

iOS8中使用使用CoreLocation前需要调用如下函数: (1)始终允许访问位置信息 - (void)requestAlwaysAuthorization; (2)使用应用程序期间允许访问位置数据 - (void)requestWhenInUseAuthorization;示例如下: self.locationManager = [[CLLocationManager alloc]init]; _locationManager.delegate = self; _locationManager.desiredAccuracy = kCLLocationAccuracyBest; _locationManager.distanceFilter = 10; [_locationManager requestAlwaysAuthorization];//添加这句 [_locationManager startUpdatingLocation]; 2、在Info.plist文件中添加如下配置: (1)NSLocationAlwaysUsageDescription (2)NSLocationWhenInUseUsageDescription

  1. #import <CoreLocation/CoreLocation.h>

  2. @interface ViewController () <CLLocationManagerDelegate>

  3. @property (nonatomic, strong) CLLocationManager *locMgr;

  4. @end

  5. @implementation MJViewController

  6. - (CLLocationManager *)locMgr

  7. {

  8.    if(![CLLocationManager locationServicesEnabled]) return nil;

  9.    

  10.    if (!_locMgr) {

  11.        // 创建定位管理者

  12.        self.locMgr = [[CLLocationManager alloc] init];

  13.        

  14.        //在ios 8.0下要授权

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

  16.            [self.locMgr requestWhenInUseAuthorization];  //调用了这句,就会弹出允许框了.

  17.            //[self.locMgr requestAlwaysAuthorization];// 前后台同时定位

  18.        }

  19.        

  20.        

  21.        // 设置代理

  22.        self.locMgr.delegate = self;

  23.        

  24.        self.locMgr.desiredAccuracy = kCLLocationAccuracyBest; //控制定位精度,越高耗电量越大。

  25.        

  26.        self.locMgr.distanceFilter = 10; //控制定位服务更新频率。单位是“米”

  27.    }

  28.    return _locMgr;

  29. }

  30. - (void)viewDidLoad

  31. {

  32.    [super viewDidLoad];

  33.    

  34.    

  35.    // 开始定位用户的位置

  36.    [self.locMgr startUpdatingLocation];

  37.    

  38.    //    // 开始监控某个位置

  39.    //    CLRegion *region = [[CLRegion alloc] init];

  40.    //    /**

  41.    //     ........

  42.    //     */

  43.    //    [self.locMgr startMonitoringForRegion:region];

  44. }

  45. /**

  46. *  计算2个经纬度之间的直线距离

  47. */

  48. - (void)countLineDistance

  49. {

  50.    // 计算2个经纬度之间的直线距离

  51.    CLLocation *loc1 = [[CLLocation alloc] initWithLatitude:40 longitude:116];

  52.    CLLocation *loc2 = [[CLLocation alloc] initWithLatitude:41 longitude:116];

  53.    CLLocationDistance distance = [loc1 distanceFromLocation:loc2];

  54.    NSLog(@"%f", distance);

  55. }

  56. #pragma mark - CLLocationManagerDelegate

  57. /**

  58. *  只要定位到用户的位置,就会调用(调用频率特别高)

  59. *  @param locations : 装着CLLocation对象

  60. */

  61. - (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations

  62. {

  63.    // 1.取出位置对象

  64.    CLLocation *loc = [locations firstObject];

  65.    

  66.    // 2.取出经纬度

  67.    CLLocationCoordinate2D coordinate = loc.coordinate;

  68.    

  69.    // 3.打印经纬度

  70.    NSLog(@"didUpdateLocations------%f %f", coordinate.latitude, coordinate.longitude);

  71.    

  72.    // 停止定位(省电措施:只要不想用定位服务,就马上停止定位服务)

  73.    [manager stopUpdatingLocation];

  74. }

  75. @end

0 0
原创粉丝点击