1. 在Info.plist文件中添加下面两句话
  NSLocationAlwaysUsageDescription —> 确定定位吗?亲  (或者改参数类型为BOOL类型 值为Y)
  请求的授权,除了可以在APP打开时允许定位服务,也可以在APP进入后台仍然可以使用定位服务(永久) --> 与上边一个可以二选一
  [_locationManager requestAlwaysAuthorization];
  NSLocationWhenInUseUsageDescripyion —>需要定位吗? (或者改参数类型为BOOL类型 值为Y)
  此方法请求的授权,仅限于用户在打开使用APP时允许使用系统的定位服务(在应用使用期间)
  [_locationManager requestWhenInUseAuthorization];

2. 配置好后代码如下:

 #import "ViewController.h"
#import "CoreLocation/CoreLocation.h" @interface ViewController () <CLLocationManagerDelegate>{
CLLocationManager *_locationManager;
} @end @implementation ViewController - (void)viewDidLoad {
[super viewDidLoad]; self.mySwitch.on = NO;
//给switch添加点击事件
[self.mySwitch addTarget:self action:@selector(valueChange:) forControlEvents:UIControlEventValueChanged]; } - (void)valueChange:(UISwitch *)locationSwitch { if (locationSwitch.on == YES) {
//开启定位服务
//判断设备是否可以使用定位服务(如何判断 两个 一个是判断定位服务 另一个是方向指示服务)
if ([CLLocationManager locationServicesEnabled] == NO || [CLLocationManager headingAvailable] == NO) {
NSLog(@"定位设备不可用");
//将switch开关设置为NO
[locationSwitch setOn:NO animated:YES];
//程序返回
return;
}
//往下是设备可以用
if (_locationManager == nil) {
//初始化定位管理者对象
_locationManager = [[CLLocationManager alloc] init]; //做定位的先关操作(设置)
//设置精度
/*
kCLLocationAccuracyBest; 最高精度
kCLLocationAccuracyNearestTenMeters; 10米的精度(超过10米响应)
kCLLocationAccuracyHundredMeters; 100米精度
kCLLocationAccuracyKilometer; 1千米精度
kCLLocationAccuracyThreeKilometers; 3千米精度
设置精度时根据实际情况而定,如果精度越高,手机耗电量越大
*/
_locationManager.desiredAccuracy = kCLLocationAccuracyBest; //设置定位的距离筛选器此属性的作用是当前位置发生改变时,其移动的距离超过了筛选值,就会触发协议中的方法
//这里设置单位是米 (1米) double类型
_locationManager.distanceFilter = ;
//设置代理
_locationManager.delegate = self;
/*
设置手机的当前方向
CLDeviceOrientationUnknown = 0, 没有
CLDeviceOrientationPortrait, 肖像(正常拿手机的方向)
CLDeviceOrientationPortraitUpsideDown, 肖像倒过来
CLDeviceOrientationLandscapeLeft, 向左
CLDeviceOrientationLandscapeRight, 向右
CLDeviceOrientationFaceUp, 面向上(手机平放)
CLDeviceOrientationFaceDown 面向下 */
_locationManager.headingOrientation = CLDeviceOrientationPortrait; //请求用户授权,自从iOS8.0开始需要手动请求用户授权
//取到当前设备的版本号 如果大于8.0就手动开启提示
if ([UIDevice currentDevice].systemVersion.floatValue > 8.0) { //此方法请求的授权,仅限于用户在打开使用APP时允许使用系统的定位服务(在应用使用期间)
[_locationManager requestWhenInUseAuthorization];
//请求的授权,除了可以在APP打开时允许定位服务,也可以在APP进入后台仍然可以使用定位服务(永久) --> 与上边一个可以二选一
[_locationManager requestAlwaysAuthorization]; }
//启动定位服务
[_locationManager startUpdatingLocation];
//启动方向服务
[_locationManager startUpdatingHeading]; } }else { //关闭开关 关闭定位服务
NSLog(@"关闭定位服务");
} } #pragma mark - 定位服务方法 -
//定位失败的方法
- (void)locationManager:(CLLocationManager *)manager didFailWithError:(NSError *)error { NSLog(@"定位失败:%@",error); } //定位位置更新成功的方法
- (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray<CLLocation *> *)locations {
NSLog(@"位置更新成功");
NSLog(@"%@",locations); /*
数组里是上次调用方法过来的,所有的位置变化都会放入到这个数组里,只需要取最后一个移动位置即可
位置变化如果超过位置的米数就会调用一次此方法,数组里是每米的变化
*/
CLLocation *lastLacation = [locations lastObject]; //获取经纬度结构体 (重点)
CLLocationCoordinate2D coordinate = lastLacation.coordinate; CLLocationDegrees dLatitude = coordinate.latitude; //纬度
CLLocationDegrees aLongitude = coordinate.longitude; //经度 NSLog(@"经度:%f 纬度: %f",dLatitude,aLongitude); self.myLable.text = [NSString stringWithFormat:@"经度:%f 纬度: %f",dLatitude,aLongitude]; //横向偏移 (了解)
NSLog(@"横向偏移: %f",lastLacation.horizontalAccuracy);
//纵向偏移 (了解)
NSLog(@"纵向偏移: %f",lastLacation.verticalAccuracy); } //更新方向的方法
- (void)locationManager:(CLLocationManager *)manager didUpdateHeading:(CLHeading *)newHeading {
NSLog(@"方向发生改变");
//打印磁头方向
NSLog(@"%.1f",newHeading.magneticHeading); } //了解
- (BOOL)locationManagerShouldDisplayHeadingCalibration:(CLLocationManager *)manager { //返回YES 允许出现方向矫正界面 NO就是不允许
return YES; } @end

地图之CoreLocation的更多相关文章

  1. 地图定位CoreLocation框架,地理位置编码与反编码

    在现代互联网时代,越来越多的应用,都用到了地图定位功能,在iOS开发中,想要加入这种功能,必须基于两个框架进行开发: 1.Map Kit:用于显示地图, 2.CoreLocation:用于显示地理位置 ...

  2. CoreLocation MKMapView 地图

    系统自带地图  框架: CoreLocation MapKit CLLocationManager --> 定位管理者  CLGeocoder --> 地理编码器 MKMapView -- ...

  3. 【原】iOS学习48地图

    一.地图的简介 在移动互联网时代,移动app能解决用户的很多生活琐事,比如 导航:去任意陌生的地方 周边:找餐馆.找酒店.找银行.找电影院 手机软件:微信摇一摇.QQ附近的人.微博.支付宝等 在上述应 ...

  4. UI进阶 地图

    一.地图的简介 在移动互联网时代,移动app能解决用户的很多生活琐事,比如    导航:去任意陌生的地方    周边:找餐馆.找酒店.找银行.找电影院    手机软件:微信摇一摇.QQ附近的人.微博. ...

  5. iOS完整学习步骤

    一  C语言 1.1基本数据类型和基本运算 1.2 函数 数组 字符串 指针 1.3 预处理指令 1.4结构体 枚举 1.5 文件操作 内存管理 二 Objective - C 2.1 面向对象 2. ...

  6. 最新 iOS 框架整体梳理(一)

    前言 这段话其实是我差不多写完文章之后再回过头来写的,原本在写文章之前想写一下写的初衷的,但当我写完之后感觉初衷没有收获更真切一些.其实到这篇为止总结出来的也就三十多个,有些是比较新的框架,有些是我们 ...

  7. Corelocation及地图控件学习笔记

    Corelocation基本使用 在地图章节的学习中,首先要学的便是用户位置定位,因此我们首先要掌握Corelocation的使用.(在IOS8以前可以系统会直接请求授权,现在需要我们自己调用方式通知 ...

  8. iOS:地图:MapKit和CoreLocation

    地图:MapKit和CoreLocation 简介: 现在很多的社交软件都引入了地图和定位功能,要想实现这2大功能,那就不得不学习其中的2个框架:MaKit和CoreLocation CoreLoca ...

  9. iOS- 用MapKit和CoreLocation 来实现移动设备(地图与定位)

    1.前言 发现在很多的社交软件都引入了地图和定位功能,如果我们要想实现这两大功能,需要利用到两个框架:MapKit和CoreLocation   我们先来看看CoreLocation框架:   它可以 ...

随机推荐

  1. SVN入门-2分钟教你入门

    版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/u010540106/article/details/37317201   学习SVN首先我们应该知道 ...

  2. Eclipse插件--一次copy多个文件的相对路径路径

    因为工作需要, 在网上找了很多插件, 本来有个easyTools应该可以, 但下载文件好像没了. 只好自己动手搞了一个简单的, 暂时一个复制文件相对路径的功能, 有同样需求的童鞋, 可以试一下 plu ...

  3. blogCMS中出现的错误整理

    1.在写日期归档的时候,出现如下错误: not enough values to unpack (expected 2, got 1) 出现这个错误是因为:字符串需要能够split成2份才能赋值给2个 ...

  4. iOS 多线程安全 与 可变字典

    这周最大的收获是稍稍通透了 多线程安全字典的重要性.  诱因是,发现了有字典坏地址错误      果断以为是 value 或者 key 是可能出现了空值,补充了潜在的判断,虽然有的位置已经预判断的,但 ...

  5. [转]《Python爬虫学习系列教程》

    <Python爬虫学习系列教程>学习笔记 http://cuiqingcai.com/1052.html 大家好哈,我呢最近在学习Python爬虫,感觉非常有意思,真的让生活可以方便很多. ...

  6. 微服务与SOA

    微服务跟SOA有什么区别呢,可以把微服务当做去除了ESB的SOA.ESB是SOA架构中的中心总线,拓扑结构应该是星形的,而微服务是去中心化的分布式软件架构. 一.巨石(monolith) web应用程 ...

  7. vue项目配置less预编译语言

    当所有东西都 准备好之后 : 第一步: 安装less依赖,npm install less less-loader --save 第二步:找到webpack配置文件webpack.base.conf. ...

  8. 20162305李昱兴 2016-2017-2 《Java程序设计》第2周学习总结

    20162305 2016-2017-2 <Java程序设计>第2周学习总结 教材学习内容总结 教材的第二章以数据和表达式为主.在第二章的学习中,我了解了print以及println的用法 ...

  9. DCU Streamer Prefetcher

    DCU Streamer Prefetcher数据高速缓存单元预取流设置.如果设置为Enabled,会预取流并发送到它的一级缓存,以改善数据处理和系统性能,所以建议选择Enabled.选项:Enabl ...

  10. combox datagrid重复请求问题

    html代码中利用class声明了datagrid,导致easyUI解析class代码的时候先解析class声明中的datagrid,这样组件就请求了一次url:然后又调用js初始化代码请求一次url ...