IOS中定位如果不使用第三方的框架,就会使用系统自带的CoreLocation完成定位。CLLocationManager类:该类主要用于定位,获取用户的基本信息,结合MapKit使用就能实现简单的导航功能。
- CLLocationManager 使用
- 首先实例化一个CLLocationManager对象
CLLocationManager *manager=[[CLLocationManager alloc] init];
manager.distanceFilter = 100;//配置多少米跟新一次
manager.desiredAccuracy = kCLLocationAccuracyNearestTenMeters;//配置精确度
manager.activityType = CLActivityTypeOther;//配置导航用途
- 设置对象的代理
manager.delegate=self;
- 在IOS8之前不需要做特殊处理
- 但是在IOS8的时候需要主动向用户发起授权请求,并且需要在Info.plist文件中添加
NSLocationAlwaysUsageDescription
或者NSLocationWhenInUseUsageDescription
属性才能得到用户的地理位置信息
if ([[UIDevice currentDevice].systemVersion integerValue] >= 8.0) {
[self.manager requestAlwaysAuthorization];
}
else {
[self.manager startUpdatingLocation];
}
然后在didChangeAuthorizationStatus代理方法中监听授权的结果,如果授权成功踩调用startUpdatingLocation
方法获取定位信息
- 调用startUpdatingLocation获取地理位置信息
[manager startUpdatingLocation];
- 调用startUpdatingHeading获取到方向信息
[manager startUpdatingHeading];
- 实现代理中的
didUpdateLocations
方法获取地理位置信息,在代理方法中locations这个数组里面就包括了所定位到的地理位置信息。
- CLLocationManager使用注意事项
- 模拟器调试的时候如果出现BUG可以试试重置模拟器
- 在调用
startUpdatingHeading
方法的时候不需要用户授权
CLLocationManager类中一些字段的说明
location.coordinate;
location.altitude;
location.course;
location.horizontalAccuracy;
location.verticalAccuracy;
location.timestamp;
location.speed;
kCLDistanceFilterNone;
kCLLocationAccuracyBestForNavigation
kCLLocationAccuracyBest;
kCLLocationAccuracyNearestTenMeters;
kCLLocationAccuracyHundredMeters;
kCLLocationAccuracyKilometer;
kCLLocationAccuracyThreeKilometers;
CLActivityTypeOther 作为普通用途
CLActivityTypeAutomotiveNavigation 作为车辆导航
CLActivityTypeFitness 作为不行
CLActivityTypeOtherNavigation 作为其它导航