地图之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框架: 它可以 ...
随机推荐
- 003-Java非堆CodeCache详解
一.概述 Java的内存由堆和非堆两个部分组成.对于堆来说,它的组成是比较确定的,它包含了年轻代和年老代两个部分,而年轻代又是由Eden区和两个Survivor区组成.可是,非堆由哪些部分组成呢? 在 ...
- Java并发—java.util.concurrent并发包概括(转载)
一.描述线程的类:Runable和Thread都属于java.lang包 二.内置锁synchronized属于jvm关键字,内置条件队列操作接口Object.wait()/notify()/noti ...
- ubuntu下安装qwt
转载自:http://blog.chinaunix.net/uid-20717410-id-256767.html 相对于官方说明,特别适应于使用qt IDE开发者. //以下为引用: 虽然官网上说只 ...
- Swap 2 Variables in Python
In Python, it's concise, easy and faster to swap 2 variables compared in other Programming languages ...
- C++匿名命名空间
当定义一个命名空间时,可以忽略这个命名空间的名称: namespce { char c; int i; double d; } ...
- Django_内置Admin
Django内置Admin Django内置的Admin是对于model中对应的数据表进行增删改查提供的组件,使用方式有: 依赖APP: django.contrib.auth django.co ...
- NIO复习02
Selector 1. Selector(选择器)是Java NIO中能够检测一到多个NIO通道,并能够知晓通道是否为诸如读写事件做好准备的组件.这样,一个单独的线程可以管理多个channel,从而管 ...
- adas--智能驾驶辅助系统
先进驾驶辅助系统(Advanced Driver AssistantSystem),简称ADAS,是利用安装于车上的各式各样的传感器(可侦测光.热.压力等变数), 在第一时间收集车内外的环境数据, 进 ...
- CSS Id 和 Class选择器
CSS Id 和 Class选择器 如果你要在HTML元素中设置CSS样式,你需要在元素中设置"id" 和 "class"选择器. 一.id 选择器 id 选择 ...
- 20145201 《Java程序设计》第四周学习总结
20145201 <Java程序设计>第四周学习总结 教材学习内容总结 本周学习了课本第六.七章内容,即继承与多态.接口与多态. 第六章 继承与多态 6.1 何谓继承 6.1.1 继承共同 ...