- 不支持模擬器定位
- 可以獲取當前的位置和經緯度
- 項目中有用到,拿來分享,大神勿噴,歡迎交流
- 導入蘋果系統(tǒng)庫 并創(chuàng)建對象
#import <CoreLocation/CoreLocation.h>
@property (nonatomic, strong) CLLocationManager *locationManager;
<CLLocationManagerDelegate>
#pragma mark - 定位
- (void)startLocation {
if ([CLLocationManager locationServicesEnabled]) {
self.locationManager = [[CLLocationManager alloc]init];
self.locationManager.delegate = self;
//控制定位精度,越高耗電量越
self.locationManager.desiredAccuracy = kCLLocationAccuracyKilometer;
// 總是授權
[self.locationManager requestAlwaysAuthorization];
self.locationManager.distanceFilter = 10.0f;
[self.locationManager requestAlwaysAuthorization];
[self.locationManager startUpdatingLocation];
}
}```
- 要實現的幾個代理方法
- (void)locationManager:(CLLocationManager *)manager didFailWithError:(NSError *)error {
if ([error code] == kCLErrorDenied) {
NSLog(@"訪問被拒絕");
}
if ([error code] == kCLErrorLocationUnknown) {
NSLog(@"無法獲取位置信息");
}
}
//定位代理經緯度回調
- (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray<CLLocation *> *)locations {
CLLocation *newLocation = locations[0];
// 獲取當前所在的城市名
CLGeocoder *geocoder = [[CLGeocoder alloc] init];
//根據經緯度反向地理編譯出地址信息
[geocoder reverseGeocodeLocation:newLocation completionHandler:^(NSArray *array, NSError *error){
if (array.count > 0){
CLPlacemark *placemark = [array objectAtIndex:0];
if (!city) {
//四大直轄市的城市信息無法通過locality獲得黎比,只能通過獲取省份的方法來獲得(如果city為空虎谢,則可知為直轄市)
city = placemark.administrativeArea;
}
// [self httpGetWeather:city];
}
else if (error == nil && [array count] == 0)
{
NSLog(@"No results were returned.");
}
else if (error != nil)
{
NSLog(@"An error occurred = %@", error);
}
}];
//系統(tǒng)會一直更新數據均驶,直到選擇停止更新颓影,因為我們只需要獲 得一次經緯度即可,所以獲取之后就停止更新
[manager stopUpdatingLocation];
}
- 獲取到的信息就上面方法的placemark對象中,一下是部分屬性,可以點進去查看
@property (nonatomic, readonly, copy, nullable) NSDictionary *addressDictionary;
@property (nonatomic, readonly, copy, nullable) NSString *name; // eg. Apple Inc.
@property (nonatomic, readonly, copy, nullable) NSString *thoroughfare; // street name, eg. Infinite Loop
@property (nonatomic, readonly, copy, nullable) NSString *subThoroughfare; // eg. 1
@property (nonatomic, readonly, copy, nullable) NSString *locality; // city, eg. Cupertino
@property (nonatomic, readonly, copy, nullable) NSString *subLocality; // neighborhood, common name, eg. Mission District
@property (nonatomic, readonly, copy, nullable) NSString *administrativeArea; // state, eg. CA
@property (nonatomic, readonly, copy, nullable) NSString *subAdministrativeArea; // county, eg. Santa Clara
@property (nonatomic, readonly, copy, nullable) NSString *postalCode; // zip code, eg. 95014
@property (nonatomic, readonly, copy, nullable) NSString *ISOcountryCode; // eg. US
@property (nonatomic, readonly, copy, nullable) NSString *country; // eg. United States
@property (nonatomic, readonly, copy, nullable) NSString *inlandWater; // eg. Lake Tahoe
@property (nonatomic, readonly, copy, nullable) NSString *ocean; // eg. Pacific Ocean
@property (nonatomic, readonly, copy, nullable) NSArray<NSString *> *areasOfInterest; // eg. Golden Gate Park
@end