今天咱們來學習一下在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]; }
固然定位功能還有不少,例如獲取手機的朝向等等,這裏就不一一列舉了。