地图与定位
标签(空格分隔): UI补充
地图与定位
在移动互联网时代我们可以去依靠手机上的地图导航区陌生的地方,也可用利用团购的app搜索最近的找餐馆、找酒店、找银行、找电影院……。
- LBS :Location Based Service
- SoLoMo :Social Local Mobile(索罗门)
上面的功能都都用到了地图和定位功能,在iOS开发中,要想加入这2大功能,必须基于2个框架进行开发
- Map Kit :用于地图展示
- Core Location :用于地理定位
Core Location的基本使用
- 从iOS 6开始,苹果在保护用户隐私方面做了很大的加强,以下操作都必须经过用户批准授权
- 获得用户的位置
- 访问用户的通讯录、日历、相机、相册等等
当想访问用户的隐私信息时,系统会自动弹出一个对话框让用户授权
一旦用户选择了“Don’t Allow”,意味着你的应用以后就无法使用定位功能开发者可以在Info.plist中设置NSLocationUsageDescription说明定位的目的
简单使用
导入框架
导入主头文件
#import <CoreLocation/CoreLocation.h>
- CoreLocation框架使用须知
- CoreLocation框架中所有数据类型的前缀都是CL
- CoreLocation中使用CLLocationManager对象来做用户定位
- CoreLocation框架使用须知
CLLocationManager
CLLocationManager的常用操作
开始用户定位
- (void)startUpdatingLocation;
停止用户定位
- (void) stopUpdatingLocation;
当调用了startUpdatingLocation方法后,就开始不断地定位用户的位置,中途会频繁地调用代理的下面方法
- (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations;
每隔多少米定位一次
@property(assign, nonatomic) CLLocationDistance distanceFilter;
定位精确度(越精确就越耗电)
@property(assign, nonatomic) CLLocationAccuracy desiredAccuracy;
- (void)viewDidLoad {
[super viewDidLoad];
// 1.获取用户的授权状态(iOS7只要使用到定位,就会直接请求授权)
CLAuthorizationStatus status = [CLLocationManager authorizationStatus];
if (status == kCLAuthorizationStatusNotDetermined) {
if ([self.mgr respondsToSelector:@selector(requestAlwaysAuthorization)]) {
[self.mgr requestAlwaysAuthorization];
}
}
// 2.开始定位(当调用该方法,系统就会不停的更新用户的位置)
[self.mgr startUpdatingLocation];
}
#pragma mark - 懒加载
- (CLLocationManager *)mgr
{
if (_mgr == nil) {
self.mgr = [[CLLocationManager alloc] init];
// 设置代理,在代理方法中可以拿到用户的位置
self.mgr.delegate = self;
// 设置定位的精度(精度越高越耗电)
self.mgr.desiredAccuracy = kCLLocationAccuracyBestForNavigation;
// 设置当用户移动的时候,重新来定位
self.mgr.distanceFilter = 10.0;
}
return _mgr;
}
CLLocation
CLLocation用来表示某个位置的地理信息,比如经纬度、海拔等等
@property(readonly, nonatomic) CLLocatio