#import "ViewController.h"
#import <CoreLocation/CoreLocation.h>
@interface ViewController () <CLLocationManagerDelegate>
@property (nonatomic, strong) CLLocationManager *manager;
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
// 1、创建管理者
// self.manager = [[CLLocationManager alloc] init];
// 2、设置代理人
self.manager.delegate = self;
// 设置多久获取一次
// self.manager.distanceFilter = 500;
// 设置获取位置的精确度
/*
kCLLocationAccuracyBestForNavigation 最佳导航
kCLLocationAccuracyBest; 最精准
kCLLocationAccuracyNearestTenMeters; 10米
kCLLocationAccuracyHundredMeters; 百米
kCLLocationAccuracyKilometer; 千米
kCLLocationAccuracyThreeKilometers; 3千米
*/
// self.manager.desiredAccuracy = kCLLocationAccuracyNearestTenMeters;
// iOS7 直接可以如此调用
// self.manager startUpdatingLocation;
/*
iOS8 需要向用户申请 并且在info中填写
NSLocationWhenInUseDescription,允许在前台获取GPS的描述
NSLocationAlwaysUsageDescription,允许在后台获取GPS的描述
*/
[self.manager requestAlwaysAuthorization];
}
/*
已经废弃
- (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation
*/
/**
* 授权状态发生改变的时候调用->iOS8 iOS7不需要实现这个方法
*
* @param manager 触发事件的对象
* @param status 获取到的状态
*/
- (void)locationManager:(CLLocationManager *)manager didChangeAuthorizationStatus:(CLAuthorizationStatus)status {
/*
用户从未选择过权限
kCLAuthorizationStatusNotDetermined
无法使用定位服务,该状态用户无法改变
kCLAuthorizationStatusRestricted
用户拒绝该应用使用定位服务,或是定位服务总开关处于关闭状态
kCLAuthorizationStatusDenied
已经授权(废弃)
kCLAuthorizationStatusAuthorized
用户允许该程序无论何时都可以使用地理信息
kCLAuthorizationStatusAuthorizedAlways
用户同意程序在可见时使用地理位置
kCLAuthorizationStatusAuthorizedWhenInUse
*/
if (status == kCLAuthorizationStatusNotDetermined) {
NSLog(@"等待授权");
} else if (status == kCLAuthorizationStatusAuthorizedAlways || status ==kCLAuthorizationStatusAuthorizedWhenInUse) {
NSLog(@"授权成功");
// 开始更新位置
[manager startUpdatingLocation];
} else {
NSLog(@"授权失败");
}
}
/**
* 地理位置更新的时候会走的方法
*
* @param manager 触发事件的对象
* @param locations 获取到的位置
*/
- (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations {
NSLog(@"%s", __func__);
// 获取一次位置后停止更新
// [manager stopUpdatingLocation]
// 1.获取最后一次的位置
/*
location.coordinate; 坐标, 包含经纬度
location.altitude; 设备海拔高度 单位是米
location.course; 设置前进方向 0表示北 90东 180南 270西
location.horizontalAccuracy; 水平精准度
location.verticalAccuracy; 垂直精准度
location.timestamp; 定位信息返回的时间
location.speed; 设备移动速度 单位是米/秒, 适用于行车速度而不太适用于不行
*/
/*
可以设置模拟器模拟速度
bicycle ride 骑车移动
run 跑动
freeway drive 高速公路驾车
*/
CLLocation *location = [locations lastObject];
NSLog(@"%f, %f speed = %f", location.coordinate.latitude , location.coordinate.longitude, location.speed);
}
#pragma mark 懒加载
/**
* 懒加载->只有一个初始化对象的时候多用懒加载
*
* @return CLLocationManager
*/
- (CLLocationManager *)manager {
if (_manager == nil) {
_manager = [[CLLocationManager alloc] init];
}
return _manager;
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
iOS开发-地图01-corelocation
最新推荐文章于 2017-02-09 10:38:44 发布