码迷,mamicode.com
首页 > 其他好文 > 详细

定位功能

时间:2016-01-23 10:19:47      阅读:159      评论:0      收藏:0      [点我收藏+]

标签:

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

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

技术分享

 

步骤二:

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

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

技术分享

 

接下来,上代码

步骤三:

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

#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];
}

 

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

 

定位功能

标签:

原文地址:http://www.cnblogs.com/dingjiwoniu-blogs/p/5152829.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!