#import <UIKit/UIKit.h> #import <CoreLocation/CoreLocation.h> #import <MapKit/MapKit.h> @interface ANNViewController : UIViewController <CLLocationManagerDelegate> @end #import "ANNViewController.h" @interface ANNViewController () @property (strong, nonatomic) IBOutlet UILabel *longitude; @property (strong, nonatomic) IBOutlet UILabel *latitude; @property (strong, nonatomic) IBOutlet UILabel *location; @property (strong, nonatomic) CLLocationManager *locationManager; @end @implementation ANNViewController - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view, typically from a nib. self.view.backgroundColor = [UIColor whiteColor]; //ios 8后 //在Info.plist中加入两个缺省没有的字段 //NSLocationAlwaysUsageDescription //NSLocationWhenInUseUsageDescription //建立CLLocationManager对象 self.locationManager = [[CLLocationManager alloc] init]; //设置代理为本身 if ([CLLocationManager locationServicesEnabled]) { NSLog( @"Starting CLLocationManager" ); self.locationManager.delegate = self; [self.locationManager requestAlwaysAuthorization]; self.locationManager.distanceFilter = 200; self.locationManager.desiredAccuracy = kCLLocationAccuracyBest; [self.locationManager startUpdatingLocation]; } else { NSLog( @"Cannot Starting CLLocationManager" ); /*self.locationManager.delegate = self; self.locationManager.distanceFilter = 200; locationManager.desiredAccuracy = kCLLocationAccuracyBest; [self.locationManager startUpdatingLocation];*/ } } - (IBAction)locationButton:(UIButton *)sender { [self.locationManager startUpdatingLocation]; } - (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation { //将经度显示到label上 self.longitude.text = [NSString stringWithFormat:@"%lf", newLocation.coordinate.longitude]; //将纬度现实到label上 self.latitude.text = [NSString stringWithFormat:@"%lf", newLocation.coordinate.latitude]; // 获取当前所在的城市名 CLGeocoder *geocoder = [[CLGeocoder alloc] init]; //根据经纬度反向地理编译出地址信息 [geocoder reverseGeocodeLocation:newLocation completionHandler:^(NSArray *array, NSError *error) { if (array.count > 0) { CLPlacemark *placemark = [array objectAtIndex:0]; //将得到的全部信息显示到label上 self.location.text = placemark.name; //获取城市 NSString *city = placemark.locality; if (!city) { //四大直辖市的城市信息没法经过locality得到,只能经过获取省份的方法来得到(若是city为空,则可知为直辖市) city = placemark.administrativeArea; } NSLog(@"city = %@", city); } else if (error == nil && [array count] == 0) { NSLog(@"No results were returned."); } else if (error != nil) { NSLog(@"An error occurred = %@", error); } }]; //系统会一直更新数据,直到选择中止更新,由于咱们只须要得到一次经纬度便可,因此获取以后就中止更新 // [manager stopUpdatingLocation]; } -(void)locationManager:(CLLocationManager *)manager didFailWithError:(nonnull NSError *)error { NSLog(@"%@",error); } - (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; // Dispose of any resources that can be recreated. } @end