目前很多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
开启定位
[self.locationManager startUpdatingLocation];
定位管理器的代理方法
- (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray<CLLocation *> *)locations {
// 获取用户位置的对象
/**
* locations 是位置对象的集合,数组中最后一个对象表示当前位置的位置对象
*/
CLLocation *location = [locations lastObject];
/**
* CLLocationCoordinate2D 是一个结构体
latitude 纬度
longitude 经度
1度 近似等于 111km
*/
CLLocationCoordinate2D coordinate = location.coordinate;
NSLog(@"经度=%lf 纬度=%lf ",coordinate.longitude,coordinate.latitude);
}
网友评论