定位功能

今天咱們來學習一下在iOS開發中如何使用定位功能。git

PS:定位功能在模擬器上不必定起做用,因此還請在真機上測試學習

實現iOS定位功能首要步驟:固然是新建一個工程啦~ !~測試

步驟一:導入系統定位的類庫  CoreLocation.framework編碼

 

步驟二:atom

須要在plist文件中添加默認缺省的字段NSLocationAlwaysUsageDescription,這個提示是:「容許應用程序在您並未使用該應用程序時訪問您的位置嗎」NSLocationAlwaysUsageDescription對應的值是告訴用戶使用定位的目的或者是標記。(不管有用沒用應用程序,都得到用戶位置)spa

須要在plist文件中添加默認缺省的字段NSLocationWhenInUsageDescription,這個時候的提示是:「容許應用程序在您使用該應用程序時訪問您的位置嗎代理

 

接下來,上代碼code

步驟三:對象

首先在須要定位的類中導入頭文件,並生成定位管理者屬性blog

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

 

固然定位功能還有不少,例如獲取手機的朝向等等,這裏就不一一列舉了。

相關文章
相關標籤/搜索