地图之CoreLocation
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的更多相关文章
- 地图定位CoreLocation框架,地理位置编码与反编码
在现代互联网时代,越来越多的应用,都用到了地图定位功能,在iOS开发中,想要加入这种功能,必须基于两个框架进行开发: 1.Map Kit:用于显示地图, 2.CoreLocation:用于显示地理位置 ...
- CoreLocation MKMapView 地图
系统自带地图 框架: CoreLocation MapKit CLLocationManager --> 定位管理者 CLGeocoder --> 地理编码器 MKMapView -- ...
- 【原】iOS学习48地图
一.地图的简介 在移动互联网时代,移动app能解决用户的很多生活琐事,比如 导航:去任意陌生的地方 周边:找餐馆.找酒店.找银行.找电影院 手机软件:微信摇一摇.QQ附近的人.微博.支付宝等 在上述应 ...
- UI进阶 地图
一.地图的简介 在移动互联网时代,移动app能解决用户的很多生活琐事,比如 导航:去任意陌生的地方 周边:找餐馆.找酒店.找银行.找电影院 手机软件:微信摇一摇.QQ附近的人.微博. ...
- iOS完整学习步骤
一 C语言 1.1基本数据类型和基本运算 1.2 函数 数组 字符串 指针 1.3 预处理指令 1.4结构体 枚举 1.5 文件操作 内存管理 二 Objective - C 2.1 面向对象 2. ...
- 最新 iOS 框架整体梳理(一)
前言 这段话其实是我差不多写完文章之后再回过头来写的,原本在写文章之前想写一下写的初衷的,但当我写完之后感觉初衷没有收获更真切一些.其实到这篇为止总结出来的也就三十多个,有些是比较新的框架,有些是我们 ...
- Corelocation及地图控件学习笔记
Corelocation基本使用 在地图章节的学习中,首先要学的便是用户位置定位,因此我们首先要掌握Corelocation的使用.(在IOS8以前可以系统会直接请求授权,现在需要我们自己调用方式通知 ...
- iOS:地图:MapKit和CoreLocation
地图:MapKit和CoreLocation 简介: 现在很多的社交软件都引入了地图和定位功能,要想实现这2大功能,那就不得不学习其中的2个框架:MaKit和CoreLocation CoreLoca ...
- iOS- 用MapKit和CoreLocation 来实现移动设备(地图与定位)
1.前言 发现在很多的社交软件都引入了地图和定位功能,如果我们要想实现这两大功能,需要利用到两个框架:MapKit和CoreLocation 我们先来看看CoreLocation框架: 它可以 ...
随机推荐
- 解决127.0.0.1 localhost 劫持问题
在一个安装iis的过程中,把网站部署上去之后就发现127.0.0.1或者localhost都会跳转到一个莫名的网站,发现断网之后就是会跳转到一个Http://www.76636.com 类似这种的网站 ...
- delphi webbrowser post自动登录
delphi webbrowser post自动登录 var EncodedDataString: WideString; PostData: OleVariant; Headers: ...
- CNN学习笔记:卷积神经网络
CNN学习笔记:卷积神经网络 卷积神经网络 基本结构 卷积神经网络是一种层次模型,其输入是原始数据,如RGB图像.音频等.卷积神经网络通过卷积(convolution)操作.汇合(pooling)操作 ...
- sql创建表、改变表、关联查询语句
- python网络编程——网络IO模型
1 网络IO模型介绍 服务器端编程经常需要构造高性能的IO模型,常见的IO模型有四种: (1)同步阻塞IO(Blocking IO):即传统的IO模型. (2)同步非阻塞IO(Non-bl ...
- BeatSaber节奏光剑插件开发官方教程1-创建一个插件模板
原文:https://wiki.assistant.moe/modding/intro 一.简介 Beat Saber 开发环境:unity2018.C#..NET framework 4.6. 此教 ...
- Linux实用命令工具-dtrx根据需要自动解压
刚刚逛网站的时候看到一个命令工具很不错——dtrx. 这个工具能够解压的类型包括tar, zip,rpm, deb, gem, 7z, cpio, rar 等等,并且这个工具能自动识别压缩包类型并进行 ...
- Spring中的@Transactional以及事务的详细介绍
首先来说下事务,说到事务就不得不说它的四个特性(acid): 一.特性 1.原子性(atomicity):一个事务当作为一个不可分割的最小工作单元,一组操作要么全部成功,要么全部失败. 2.一致性(c ...
- 【P3355】骑士共存问题(最大流+黑白染色,洛谷)
这个题刚看上去就让人不禁想到一道叫做方格取数问题的题目,事实上也就是这么做,对棋盘黑白染色,然后黑格子连源点,白的连汇点,点权为1.然后判断一下黑格子能影响到的白格子,边权为inf,跑一遍最大流就可以 ...
- 前端开发日记之jQuery
优先引入CDN上的jQuery,如果失效再引入本地的jQuery! <script src="http://libs.baidu.com/jquery/1.11.1/jquery.js ...