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