iOS-定位功能

热门标签

特别声明:文章多为网络转载,资源使用一般不提供任何帮助,特殊资源除外,如有侵权请联系!

今天我们来学习一下在iOS开发中如何使用定位功能。

PS:定位功能在模拟器上不一定起作用,所以还请在真机上测试吧

实现iOS定位功能首要步骤:当然是新建一个工程啦~ !~

步骤一:导入系统定位的类库  CoreLocation.framework

iOS-定位功能

 

步骤二:

需要在plist文件中添加默认缺省的字段“NSLocationAlwaysUsageDescription”,这个提示是:“允许应用程序在您并未使用该应用程序时访问您的位置吗?”NSLocationAlwaysUsageDescription对应的值是告诉用户使用定位的目的或者是标记。(无论有用没用应用程序,都获得用户位置)

需要在plist文件中添加默认缺省的字段“NSLocationWhenInUsageDescription”,这个时候的提示是:“允许应用程序在您使用该应用程序时访问您的位置吗?”

iOS-定位功能

接下来,上代码

步骤三:

首先在需要定位的类中导入头文件,并生成定位管理者属性

#import "ViewController.h"
//系统定位的类库
#import <CoreLocation/CoreLocation.h>

@interface ViewController () <CLLocationManagerDelegate>

@property (nonatomic, strong) CLLocationManager *manager;

@end

 

步骤四:

viewDidLoad方法中,初始化定位管理者、设置代理、并开启定位功能

- (void)viewDidLoad {
    [super viewDidLoad];
    
    //1.创建位置管理者
    self.manager = [[CLLocationManager alloc] init];
    
    //判断当前的系统版本号是否大于8.0
    if ([[UIDevice currentDevice].systemVersion floatValue] >= 8.0) {
        //若能进入If 说明当前系统是大于8.0

        //向用户请求我们的程序使用位置
        [self.manager requestAlwaysAuthorization];
        [self.manager requestWhenInUseAuthorization];
    }
    
    //设置定位的更新距离(每移动10米更新一次,实质上是让代理方法重新走一次)
    self.manager.distanceFilter = 10.0f;
    
    //设置代理啊
    self.manager.delegate = self;
    
    //开启定位功能
    [self.manager startUpdatingLocation];
}

 

步骤五:

实现定位代理方法

-(void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations
{
    NSLog(@"locations = %@",locations);
    
    //获得当前的卫星的位置
    CLLocation *location = (CLLocation *)[locations lastObject];
    
    //从位置信息中获取经纬度
    double lat = location.coordinate.latitude;
    double lon = location.coordinate.longitude;
    NSLog(@"lat=====%f,lon+++++%f",lat,lon);
    
    //使用位置 反编码 解析 位置信息
    //创建位置反编码的对象
    CLGeocoder *geocoder = [[CLGeocoder alloc] init];
    //使用该对象获得位置信息
    [geocoder reverseGeocodeLocation:location completionHandler:^(NSArray *placemarks, NSError *error){
        //遍历解析出来的位置信息
        for (CLPlacemark *placemark in placemarks) {
            NSLog(@"name = %@",placemark.locality);
        }
    }];
}

得到打印的结果是

2016-01-23 08:35:24.186 LocationDemo[798:258157] locations = (
    "<+22.65055322,+114.04342625> +/- 65.00m (speed -1.00 mps / course -1.00) @ 16/1/23 \U4e2d\U56fd\U6807\U51c6\U65f6\U95f4 \U4e0a\U53488:35:24"
)
2016-01-23 08:35:24.187 LocationDemo[798:258157] lat=====22.650553,lon+++++114.043426
2016-01-23 08:35:25.117 LocationDemo[798:258157] name = 深圳市

 

 

 

ps:反地理编码是通过经纬度得到地理位置信息

反地理编码的方法:

 

CLGeocoder *geocoder = [[CLGeocoder alloc] init];
    //使用该对象获得位置信息
    [geocoder reverseGeocodeLocation:location completionHandler:^(NSArray *placemarks, NSError *error){
        //遍历解析出来的位置信息
        for (CLPlacemark *placemark in placemarks) {
            NSLog(@"name = %@",placemark.locality);
        }
    }];

 

地理编码是通过地理位置得到经纬度信息

地理编码的方法:

 

[geocoder geocodeAddressString:@"深圳市" completionHandler:^(NSArray *placemarks, NSError *error) {
        for (CLPlacemark *placemark in placemarks) {
            NSLog(@"%@",placemark.location);
        }
    }];

  通过触摸事件来停止更新定位

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
    //停止定位更新
    [self.manager stopUpdatingLocation];
}

 

当然定位功能还有很多,例如获取手机的朝向等等,这里就不一一列举了。

标签:

未经允许不得转载:作者:SheaYang, 转载或复制请以 超链接形式 并注明出处 技术狗|博客
原文地址:《iOS-定位功能》 发布于2019-09-28

分享到:
赞(0)

评论 抢沙发

4 + 5 =


iOS-定位功能

长按图片转发给朋友

Vieu4.0主题
专业打造轻量级个人企业风格博客主题!专注于前端开发,全站响应式布局自适应模板。

登录

忘记密码 ?

您也可以使用第三方帐号快捷登录

Q Q 登 录
微 博 登 录