使用CoreLocation定位

  • 导入框架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 *)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对象详解】

你可能感兴趣的:(使用CoreLocation定位)