①导入CoreLocation系统框架
#import
@property (nonatomic, strong,nonnull)CLLocationManager *locationManager;
③遵守CLLocationManager协议
self.locationManager = [[CLLocationManager alloc]init];
self.locationManager.delegate = self;
self.locationManager.desiredAccuracy = kCLLocationAccuracyBest;//定位精确度最好
// 判断的手机的定位功能是否开启
// 开启定位:设置 >隐私 >位置 > 定位服务
if ([CLLocationManager locationServicesEnabled]) {
// 启动位置更新
// 开启位置更新需要与服务器进行轮询所以会比较耗电,在不需要时用stopUpdatingLocation方法关闭;
[self.locationManager startUpdatingLocation];
DLog(@"开启成功");
} else {
DLog(@"请开启定位功能!");
}
注意:①iOS8以上一定要加下面这行代码
②并且要在 info.plist里加入下面两个缺省字段,值设置为YES,不然代理方法不执行
NSLocationWhenInUseUsageDescription //允许在前台获取GPS的描述
NSLocationAlwaysUsageDescription //允许在前、后台获取GPS的描述
做了这些,当你定位的时候才会弹出获取GPS的提醒窗口,因此弹出了窗口也就证明了定位成功了.
if ([[[UIDevice currentDevice]systemVersion] doubleValue] >8.0)
{
// 设置定位权限仅iOS8以上有意义,而且iOS8以上必须添加此行代码
[self.locationManager requestWhenInUseAuthorization];//前台定位
// [self.locationManager requestAlwaysAuthorization];//前后台同时定位
}
⑤实现代理方法,获取位置信息// 实现代理方法
- (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray<CLLocation *> *)locations
{
CLLocation *newLocation = locations[0];
// 位置反编码
CLGeocoder *geocoder = [[CLGeocoder alloc]init];
[geocoder reverseGeocodeLocation:newLocation completionHandler:^(NSArray *placemarks, NSError *error){
CLPlacemark *placemark = [placemarks objectAtIndex:0];
DLog(@"%@", placemark.name);// 详细位置
DLog(@"%@", placemark.country);// 国家
DLog(@"%@", placemark.locality);// 市
DLog(@"%@", placemark.subLocality);// 区
DLog(@"%@", placemark.thoroughfare);// 街道
DLog(@"%@", placemark.subThoroughfare);// 子街道
}];
[manager stopUpdatingLocation];
}
// 定位失误时触发
- (void)locationManager:(CLLocationManager *)manager didFailWithError:(NSError *)error
{
NSLog(@"error:%@",error);
}
具体怎么修改,上一篇博客有详细图解 ↓