目前很多App都集成了定位這項功能,蘋果自身的框架中也包含具有這種功能的框架,這就是CoreLocation框架
和大多數框架一樣,在使用前需要導入CoreLocation框架,在Xcode5以后,使用import導入即可.
創建定位管理器
在使用定位功能的時候,需要給控制器創建一個定位管理器,由于整個控制器都需要使用這個定位管理器,我們在這里將其聲明為一個屬性
設置屬性
@property (nonatomic,strong) CLLocationManager *locationManager;
初始化管理器
- (CLLocationManager *)locationManager {
if (!_locationManager) {
_locationManager = [[CLLocationManager alloc] init];
}
return _locationManager;
}
設置代理,當前控制器需要遵守CLLocationManagerDelegate協議
self.locationManager.delegate = self;
設置定位的精確程度:
- kCLLocationAccuracyBestForNavigation
- kCLLocationAccuracyBest
- kCLLocationAccuracyNearestTenMeters
- kCLLocationAccuracyHundredMeters
- kCLLocationAccuracyKilometer
- kCLLocationAccuracyThreeKilometers
self.locationManager.desiredAccuracy = kCLLocationAccuracyBest;
申請授權: 在iOS8.0以后,蘋果為保護用戶隱私的安全性,需要開發者,手動向用戶申請定位授權
授權方式分為以下兩種:
- requestAlwaysAuthorization 前后臺定位授權
- requestWhenInUseAuthorization 前臺定位授權
if ([[UIDevice currentDevice].systemVersion doubleValue] >=8.0) {
[self.locationManager requestAlwaysAuthorization];
}
注意:
此處需要修改項目的info.plist文件,否則CLLocationManager協議方法不響應,無法回掉GPS方法,不出現獲取權限提示,此處根據上一步申請的授權方式,填寫響應的描述文件
- NSLocationAlwaysUsageDescription
- NSLocationWhenInUseDescription
Snip20160307_5.png
開啟定位
[self.locationManager startUpdatingLocation];
定位管理器的代理方法
- (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray<CLLocation *> *)locations {
// 獲取用戶位置的對象
/**
* locations 是位置對象的集合,數組中最后一個對象表示當前位置的位置對象
*/
CLLocation *location = [locations lastObject];
/**
* CLLocationCoordinate2D 是一個結構體
latitude 緯度
longitude 經度
1度 近似等于 111km
*/
CLLocationCoordinate2D coordinate = location.coordinate;
NSLog(@"經度=%lf 緯度=%lf ",coordinate.longitude,coordinate.latitude);
}