定位 - CoreLocation - 打印位置信息
1. 導(dǎo)入框架 <CoreLocation.framework>, 引入頭文件 import <CoreLocation/CoreLocation.h>;
2. 創(chuàng)建管理者對象 (strong)
#import "ViewController.h"
@interface ViewController ()<CLLocationManagerDelegate>
?
?/**? 定位管理者 ***/
@property (nonatomic, strong) CLLocationManager *mgr;
@end
?
@implementation ViewController?
?/**? 懶加載 ***/
- (CLLocationManager *)mgr{
? ? if (!_mgr) {
? ? ? ? _mgr = [[CLLocationManager alloc] init];
? ? }
? ? return _mgr;
}
?- (void)viewDidLoad {
? ? [super viewDidLoad];
?
? ? // 1. 創(chuàng)建CoreLocation管理者
?? ?
? ? // 2. 成為CoreLocaltion管理者的代理, 監(jiān)聽獲取的位置
? ? self.mgr.delegate = self;
?? ?
? ? // 3. 設(shè)置屬性
? ? // 設(shè)置多久 獲取一次位置
//? ? self.mgr.distanceFilter = 500;
?? ?
? ? /**
?? ? ? kCLLocationAccuracyBestForNavigation -- 最佳導(dǎo)航
?? ? ? kCLLocationAccuracyBest; ? ? ? ? ? ? -- 最精準
?? ? ? kCLLocationAccuracyNearestTenMeters; -- 十米
?? ? ? kCLLocationAccuracyHundredMeters;? ? -- 百米
?? ? ? kCLLocationAccuracyKilometer;? ? ? ? -- 千米
?? ? ? kCLLocationAccuracyThreeKilometers;? -- 三千米
?
?? ? */
? ? // 設(shè)置定位精確度
? ? self.mgr.desiredAccuracy = kCLLocationAccuracyBestForNavigation;
?? ?
? ? /**
?? ? *? ios7 , 只要開始定位, 系統(tǒng)就會自動要求用戶對你的應(yīng)用程序授權(quán). 但是從ios8開始, 想要定位自己必須主動要求用戶授權(quán),而且必須再info.plist文件中配置一項屬性, 才能彈出授權(quán)窗口.
?? ? ? ? NSLocationWhenInUseDescription,允許在前臺獲取GPS的描述
?? ? ? ? NSLocationAlwaysUsageDescription,允許在后臺獲取GPS的描述
?? ? */
?? ?
?? ?
? ? // 4. 請求授權(quán)定位
? ? if(IOS8){
? ? ? ? LogRed(@"ios 8");
?? ? ? ?
? ? ? ? // 主動要求用戶授權(quán), 授權(quán)成功以后會調(diào)用對應(yīng)的代理方法.
? ? ? ? [self.mgr requestAlwaysAuthorization]; // 請求前臺和后臺定位權(quán)限
//? ? ? ? [self.mgr requestWhenInUseAuthorization]; // 請求前臺定位權(quán)限
?? ? ? ?
?? ? ? ?
? ? }else{
? ? ? ? LogMagenta(@"ios 7");
?? ? ? ?
? ? ? ? // 3. 開始監(jiān)聽
? ? ? ? [self.mgr startUpdatingLocation];
? ? }
}
?
/**
?*? 當授權(quán)狀態(tài)改變時, 調(diào)用此方法
?*
?*? @param manager 觸發(fā)事件的對象
?*? @param status? 授權(quán)狀態(tài)
?*/
- (void)locationManager:(CLLocationManager *)manager didChangeAuthorizationStatus:(CLAuthorizationStatus)status
{
//
//? ? kCLAuthorizationStatusNotDetermined ? ---- 等待授權(quán)
//? ? kCLAuthorizationStatusRestricted, ? ? ---- 受限 -- 未授權(quán)
//? ? kCLAuthorizationStatusDenied? ? ? ? ? ---- 拒絕授權(quán)
//? ? kCLAuthorizationStatusAuthorizedAlways --- 前臺 后臺都授權(quán)
//? ? kCLAuthorizationStatusAuthorizedWhenInUse - 前臺授權(quán)
?? ?
? ? if (status == kCLAuthorizationStatusNotDetermined) {
? ? ? ? LogWhite(@"等待用戶授權(quán)");
? ? }else if (status == kCLAuthorizationStatusAuthorizedAlways ||
? ? ? ? ? ? ? status == kCLAuthorizationStatusAuthorizedWhenInUse)
? ? {
? ? ? ? LogRed(@"授權(quán)成功");
? ? ? ? // 開始定位
? ? ? ? [self.mgr startUpdatingLocation];
?? ? ? ?
? ? }else
? ? {
? ? ? ? LogGreen(@"授權(quán)失敗");
? ? }
}
?
#pragma mark - CLLocationManagerDelegate
/**
?*? 獲取到位置信息后就會調(diào)用
?*
?*? @param manager ? 觸發(fā)事件的對象
?*? @param locations 獲取到的位置
?*/
- (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations
{
? ??
/**
?? ? *? // CLLocation
?? ? location.coordinate; 坐標, 包含經(jīng)緯度
?? ? location.altitude; 設(shè)備海拔高度 單位是米
?? ? location.course; 設(shè)置前進方向 0表示北 90東 180南 270西
?? ? location.horizontalAccuracy; 水平精準度
?? ? location.verticalAccuracy; 垂直精準度
?? ? location.timestamp; 定位信息返回的時間
?? ? location.speed; 設(shè)備移動速度 單位是米/秒, 適用于行車速度而不太適用于不行
?? ? */
?? ?
? ? LogRed(@"%@",locations);
? ? // 1. 獲取最后一次定位的位置信息
? ? CLLocation *location = [locations lastObject];
?? ?
? ? LogYellow(@"%f --- %f ---%f",location.coordinate.latitude,location.coordinate.longitude,location.speed);
?? ?
//? ? [self.mgr stopUpdatingLocation];
}
?
轉(zhuǎn)載于:https://www.cnblogs.com/guangleijia/p/4825755.html
總結(jié)
以上是生活随笔為你收集整理的定位 - CoreLocation - 打印位置信息的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 速腾小汽车发动机保养必须做哪些项目呢?
- 下一篇: 最多两次股票交易-Best Time t