CoreLocation基本使用

#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
相關文章
相關標籤/搜索