使用CoreLocation定位

2016-11-23  本文已影响23人  FallPine

在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对象详解】

上一篇 下一篇

猜你喜欢

热点阅读