导入框架CoreLocation.framework
其实在xcode6以后可以不用导入在info中设置定位权限
Privacy - Location Always Usage Description 一直开启定位
Privacy - Location When In Use Usage Description 需要时开启定位
在info设置还不够,在代码中还要用代码来实现请求权限的功能
// 请求定位的权限
[self.locationM requestWhenInUseAuthorization];
- 创建位置管理者
/**
* 位置管理者
*/
@property (nonatomic, strong) CLLocationManager *locationM;
#pragma mark - 懒加载
- (CLLocationManager *)locationM
{
if (!_locationM) {
// 创建位置管理者
_locationM = [[CLLocationManager alloc] init];
// 设置代理
_locationM.delegate = self;
// 设置精确度
_locationM.distanceFilter = 1.0;
_locationM.desiredAccuracy = kCLLocationAccuracyBest;
}
return _locationM;
}
- 开启定位、监听代理方法
/**
* 定位
*/
- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
{
// 请求定位的权限
/**-------ios8.0+定位适配---------- */
if(isIOS(8.0))
{
// 请求前台定位授权
// 默认情况下, 只能在前台获取用户位置
// 如果想要获取后台位置, 需要勾选后台模式 location updates , 但是会出现蓝条
[_locationM requestWhenInUseAuthorization];
// 如果在iOS9.0+想要在前台授权模式下, 在后台获取用户位置, 我们需要额外的设置以下属性为YES
if (isIOS(9.0)) {
_locationM.allowsBackgroundLocationUpdates = YES;
}
// 请求前后台定位授权
// 默认在前后台都可以获取用户位置信息, 无论是否勾选后台模式locaiton updates, 而且不会出现蓝条
// 如果当前的授权状态!=用户为选择状态, 那么这个方法不会有效
// [_locationM requestAlwaysAuthorization];
}
// 开始定位
[self.locationM startUpdatingLocation];
}
#pragma mark - CLLocationManagerDelegate
-(void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations
{
NSLog(@"定位到了");
CLLocation *loca = locations.lastObject;
NSLog(@"%f, %f", loca.coordinate.longitude, loca.coordinate.latitude);
}
参考文章来至:【iOS_成才录】的【iOS CLLocation对象详解】