iOS地图定位功能的实现(解决代理方法不执行问题,解决默认定位苹果总部问题)

①导入CoreLocation系统框架

#import

②声明一个CLLocationManager定位属性

@property (nonatomicstrong,nonnull)CLLocationManager *locationManager;

③遵守CLLocationManager协议

④初始化CLLocationManager并设置代理

self.locationManager = [[CLLocationManager alloc]init];

self.locationManager.delegateself;

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]systemVersiondoubleValue] >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);

}


注意:如果打印出来的详细位置是空的,应该是地理位置是默认的苹果总部,设置成自己的经纬度就好了.

具体怎么修改,上一篇博客有详细图解     

你可能感兴趣的:(iOS开发)