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. $ python-json模块的基本用法

    准备工作 import json # 准备数据: d = dict(name = 'Tom',age = 18) json_str = '{"name":"Tom&quo ...

  2. INFO hdfs.DFSClient: Exception in createBlockOutputStream java.net解决办法

    自己安装好Hadoop2.7.x之后,发现dfs中的/bin/hadoop fs -put命令不能够使用,报错如下: [hadoop@master bin]$ ./hadoop fs -put ../ ...

  3. ajax与一般处理程序 HTTP协议交互

    1,一般处理程序中 context.Response.ContentType = "text/plain", 则  ajax参数中 也是 text 类型. 2,一般处理程序中 转化 ...

  4. Grid 行和列

    <Grid> <Grid.ColumnDefinitions> <ColumnDefinition></ColumnDefinition> <Co ...

  5. SpringBoot服务器压测对比(jetty、tomcat、undertow)

    1.本次对比基础环境信息如下: springboot版本1.5.10 centos虚机4c6G,版本7.4 centos实机2u16c40G,版本7.4,虚机运行在实机上 ab版本2.3 jprofi ...

  6. 20145222 黄亚奇 《网络对抗》Exp8 Web基础

    20145222 黄亚奇 <网络对抗>Exp8 Web基础 实践具体要求 (1).Web前端HTML(1分) 能正常安装.启停Apache.理解HTML,理解表单,理解GET与POST方法 ...

  7. Cocos2d-x项目移植到WP8系列之九:使用自定义shader

    本文原链接:http://www.cnblogs.com/zouzf/p/3995132.html 有时候想得到一些例如灰度图等特殊的渲染效果,就得用到自定义shader,关于shader的一些背景知 ...

  8. Spring Boot JDBC 连接数据库

    文本将对在Spring Boot构建的Web应用中,基于MYSQL数据库的几种数据库连接方式进行介绍. 包括JDBC.JPA.MyBatis.多数据源和事务. JDBC 连接数据库 1.属性配置文件( ...

  9. 用adb 启动camera

    adb shell am start -a android.media.action.STILL_IMAGE_CAMERA  启动camera adb shell input keyevent 27 ...

  10. CentOS7/6 关闭防火墙

    CentOS6关闭防火墙使用以下命令, //临时关闭 service iptables stop //禁止开机启动 chkconfig iptables off CentOS7中若使用同样的命令会报错 ...