導入框架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對象詳解】