iOS定位- CoreLocation框架

目前很多App都集成了定位这项功能,苹果自身的框架中也包含具有这种功能的框架,这就是CoreLocation框架

和大多数框架一样,在使用前需要导入CoreLocation框架,在Xcode5以后,使用import导入即可.

创建定位管理器

在使用定位功能的时候,需要给控制器创建一个定位管理器,由于整个控制器都需要使用这个定位管理器,我们在这里将其声明为一个属性

设置属性

@property (nonatomic,strong) CLLocationManager *locationManager;

初始化管理器

- (CLLocationManager *)locationManager {
    if (!_locationManager) {
        _locationManager = [[CLLocationManager alloc] init];
    }
    return _locationManager;
}

设置代理,当前控制器需要遵守CLLocationManagerDelegate协议

self.locationManager.delegate = self;

设置定位的精确程度:

  • kCLLocationAccuracyBestForNavigation
  • kCLLocationAccuracyBest
  • kCLLocationAccuracyNearestTenMeters
  • kCLLocationAccuracyHundredMeters
  • kCLLocationAccuracyKilometer
  • kCLLocationAccuracyThreeKilometers

self.locationManager.desiredAccuracy = kCLLocationAccuracyBest;

申请授权: 在iOS8.0以后,苹果为保护用户隐私的安全性,需要开发者,手动向用户申请定位授权

授权方式分为以下两种:

  • requestAlwaysAuthorization 前后台定位授权
  • requestWhenInUseAuthorization 前台定位授权
if ([[UIDevice currentDevice].systemVersion doubleValue] >=8.0) {
    
        [self.locationManager requestAlwaysAuthorization];
    }

注意:

此处需要修改项目的info.plist文件,否则CLLocationManager协议方法不响应,无法回掉GPS方法,不出现获取权限提示,此处根据上一步申请的授权方式,填写响应的描述文件

  • NSLocationAlwaysUsageDescription
  • NSLocationWhenInUseDescription
iOS定位- CoreLocation框架_第1张图片
Snip20160307_5.png

开启定位

[self.locationManager startUpdatingLocation];

定位管理器的代理方法

- (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations {
    
    // 获取用户位置的对象
    /**
     *  locations 是位置对象的集合,数组中最后一个对象表示当前位置的位置对象
     */
    CLLocation *location = [locations lastObject];
    
    /**
     *  CLLocationCoordinate2D 是一个结构体
        latitude  纬度
        longitude 经度
        1度 近似等于 111km
     */
    CLLocationCoordinate2D coordinate = location.coordinate;
    NSLog(@"经度=%lf   纬度=%lf ",coordinate.longitude,coordinate.latitude);
    
}

你可能感兴趣的:(iOS定位- CoreLocation框架)