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

①导入CoreLocation系统框架

#import <CoreLocation/CoreLocation.h>

②声明一个CLLocationManager定位属性

@property (nonatomicstrong,nonnull)CLLocationManager *locationManager;

③遵守CLLocationManager协议

<CLLocationManagerDelegate>

④初始化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);

}


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

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

  • 5
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值