一、需求
獲取用戶當前所在位置的經緯度。
二、實現過程
擬采用CLLocationManager類獲取用戶位置信息,所需步驟
1、導入CoreLocation.frameWork
2、通過CLLocationManager類獲取位置信息
三、代碼
#import "TestViewController.h" @implementation TestViewController #pragma mark - view life cycle - (void)viewDidLoad { [super viewDidLoad]; // example // 實例化一個位置管理器 self.locationManager = [[CLLocationManager alloc] init]; self.locationManager.delegate = self; // 設置定位精度 // kCLLocationAccuracyNearestTenMeters:精度10米 // kCLLocationAccuracyHundredMeters:精度100 米 // kCLLocationAccuracyKilometer:精度1000 米 // kCLLocationAccuracyThreeKilometers:精度3000米 // kCLLocationAccuracyBest:設備使用電池供電時候最高的精度 // kCLLocationAccuracyBestForNavigation:導航情況下最高精度,一般要有外接電源時才能使用 self.locationManager.desiredAccuracy = kCLLocationAccuracyBest; // distanceFilter是距離過濾器,為了減少對定位裝置的輪詢次數,位置的改變不會每次都去通知委托,而是在移動了足夠的距離時才通知委托程序 // 它的單位是米,這裡設置為至少移動1000再通知委托處理更新; self.locationManager.distanceFilter = 1000.0f; // 如果設為kCLDistanceFilterNone,則每秒更新一次; } - (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; // Dispose of any resources that can be recreated. } #pragma mark - Actions - (IBAction)buttonClicked:(id)sender { // 判斷的手機的定位功能是否開啟 // 開啟定位:設置 > 隱私 > 位置 > 定位服務 if ([CLLocationManager locationServicesEnabled]) { // 啟動位置更新 // 開啟位置更新需要與服務器進行輪詢所以會比較耗電,在不需要時用stopUpdatingLocation方法關閉; [self.locationManager startUpdatingLocation]; } else { NSLog(@"請開啟定位功能!"); } } #pragma mark - CLLocationManagerDelegate // 地理位置發生改變時觸發 - (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation { // 獲取經緯度 NSLog(@"緯度:%f",newLocation.coordinate.latitude); NSLog(@"經度:%f",newLocation.coordinate.longitude); // 停止位置更新 [manager stopUpdatingLocation]; } // 定位失誤時觸發 - (void)locationManager:(CLLocationManager *)manager didFailWithError:(NSError *)error { NSLog(@"error:%@",error); } @end
四、總結
CLLocationManager開啟用戶位置更新後比較耗電,不需要時要及時關閉。