#import "CJViewController.h" #import <CoreLocation/CoreLocation.h> @interface CJViewController ()<CLLocationManagerDelegate> @property (nonatomic, strong)CLLocationManager *manager; @end @implementation CJViewController // 由於位置管理器在全局中只需一份,因此只需建立一次,使用懶加載 - (CLLocationManager *)manager { if (!_manager) { // 1.建立位置管理器(用於定位用戶的位置) _manager = [[CLLocationManager alloc] init];// 建立完位置管理器後,系統默認不會自動定位,由於定位比較耗電,它不會自動開始定位,若是要開始用戶定位,要調用startUpdatingLocation方法 // 設置代理,告訴用戶位置 _manager.delegate = self; } return _manager; } - (void)viewDidLoad { [super viewDidLoad]; // 檢測定位服務是否可用(多是程序第一次訪問用戶位置時,被用戶點擊了Don‘t Allow致使定位服務不可用) if ([CLLocationManager locationServicesEnabled]) { // 若是定位服務能用,開始定位 [self.manager startUpdatingLocation]; // 經過代理告訴用戶的位置 // 每隔多少米定位一次 kCLDistanceFilterNone,表示用戶任何一個移動都會定位一次,若是不想任何一個移動就定位一次,那麼就要設定一個值 self.manager.distanceFilter = kCLDistanceFilterNone; // 精準度,越高越耗電 self.manager.desiredAccuracy = kCLLocationAccuracyHundredMeters; // 表明一百米內是準確的 }else {// 不能定位用戶的位置 // 1.告訴用戶檢查網絡情況 // 2.提醒用戶打開定位開關 } [self countDistance]; } // 計算距離 - (void)countDistance { CLLocation *location1 = [[CLLocation alloc] initWithLatitude:39.5 longitude:136]; CLLocation *location2 = [[CLLocation alloc] initWithLatitude:40 longitude:136]; CLLocationDistance distance = [location1 distanceFromLocation:location2]; NSLog(@"距離:%f", distance); } #pragma mark - CLLocationManagerDelegate // 時時監測(定位)用戶的位置,調用比較頻繁 - (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations { // 數組裏面的每個對象都是CLLocation對象,一個CLLocation就表明一個位置 CLLocation *loc = [locations firstObject]; NSLog(@"%d", locations.count); // 中止更新位置,當用戶不使用定位服務時,應當立刻中止定位(更新), 由於很是耗電 // [manager stopUpdatingLocation]; } @end