码迷,mamicode.com
首页 > 其他好文 > 详细

CoreLocation/MapKit

时间:2015-09-20 13:21:38      阅读:152      评论:0      收藏:0      [点我收藏+]

标签:

 CoreLocation

1 CoreLocation的基础使用

1>iOS7

    1.创建CoreLocation的管理者。CoreLocation要强引用

    2.实现CLLocationManagerDelegate代理。

    3.开始或停止代理

#import <CoreLocation/CoreLocation.h>
@interface ViewController () <CLLocationManagerDelegate>
@property (nonatomic, strong)CLLocationManager *mrg;
@end
@implementation ViewController

-(CLLocationManager *)mrg
{
    if (_mrg == nil) {
        //1,创建CoreLocation的管理者
        self.mrg = [[CLLocationManager alloc] init];
        
    }
    return _mrg;
}

- (void)viewDidLoad {
    [super viewDidLoad];
    
    //2,成为CoreLocation的代理
    self.mrg.delegate = self;
    
    //3,开始定位
    [self.mrg startUpdatingLocation];
    
}

#pragma mark - CLLocationManagerDelegate
-(void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations
{
     NSLog(@"%s",__func__);
    
    //打印位置信息
        /*
     location.coordinate; 坐标, 包含经纬度
     location.altitude; 设备海拔高度 单位是米
     location.course; 设置前进方向 0表示北 90东 180南 270西
     location.horizontalAccuracy; 水平精准度
     location.verticalAccuracy; 垂直精准度
     location.timestamp; 定位信息返回的时间
     location.speed; 设备移动速度 单位是米/秒, 适用于行车速度而不太适用于不行
     */
    CLLocation *location = [locations lastObject];
    NSLog(@"%f,%f",location.coordinate.latitude,location.coordinate.longitude);
    
    
    //  获取到位置信息之后就会调用(调用频率非常高).如果只需要获取一次, 就要在这里设置停止
//  [self.mgr stopUpdatingLocation];
}

2>iOS8

          iOS7只要开始定位, 系统就会自动要求用户对你的应用程序授权. 但是从iOS8开始, 想要定位必须先"自己""主动"要求用户授权.在iOS8中不仅仅要主动请求授权, 而且必须再info.plist文件中配置一项属性才能弹出授权窗口,value值可以随意写

            NSLocationWhenInUseDescription,允许在前台获取GPS的描述

            NSLocationAlwaysUsageDescription,允许在后台获取GPS的描述

    if([[UIDevice currentDevice].systemVersion doubleValue] >= 8.0)
    {
        NSLog(@"是iOS8");
        // 主动要求用户对我们的程序授权, 授权状态改变就会通知代理
        [self.mgr requestAlwaysAuthorization];     // 请求前台和后台定位权限
//      [self.mgr requestWhenInUseAuthorization];  // 请求前台定位权限
    }
    
 //iOS8中需要额外添加在个代理方法
#pragma mark - CLLocationManagerDelegate
- (void)locationManager:(CLLocationManager *)manager didChangeAuthorizationStatus:(CLAuthorizationStatus)status
{
    /*
     用户从未选择过权限
     kCLAuthorizationStatusNotDetermined
     无法使用定位服务,该状态用户无法改变
     kCLAuthorizationStatusRestricted
     用户拒绝该应用使用定位服务,或是定位服务总开关处于关闭状态
     kCLAuthorizationStatusDenied
     已经授权(废弃)
     kCLAuthorizationStatusAuthorized
     用户允许该程序无论何时都可以使用地理信息
     kCLAuthorizationStatusAuthorizedAlways
     用户同意程序在可见时使用地理位置
     kCLAuthorizationStatusAuthorizedWhenInUse
     */  
    if (status == kCLAuthorizationStatusNotDetermined) {
        NSLog(@"等待用户授权");
    }else if (status == kCLAuthorizationStatusAuthorizedAlways ||
              status == kCLAuthorizationStatusAuthorizedWhenInUse)
        
    {
        NSLog(@"授权成功");
        // 开始定位
        [self.mgr startUpdatingLocation];
        
    }else
    {
        NSLog(@"授权失败");
    }
}


2 CoreLocation的常用属性

    1.// 设置多久获取一次(单位是米,超出多米就开始调用)
    self.mgr.distanceFilter = 500;
    
    2.// 设置获取位置的精确度
    /*
      kCLLocationAccuracyBestForNavigation 最佳导航
      kCLLocationAccuracyBest;  最精准
      kCLLocationAccuracyNearestTenMeters;  10米
      kCLLocationAccuracyHundredMeters;  百米
      kCLLocationAccuracyKilometer;  千米
      kCLLocationAccuracyThreeKilometers;  3千米
     */
    self.mgr.desiredAccuracy = kCLLocationAccuracyNearestTenMeters;


CoreLocation/MapKit

标签:

原文地址:http://my.oschina.net/u/2346786/blog/508699

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!