使用CoreLocation进行定位(Swift版)
在应用开发中,很多情况需要我们获取到当前的位置和高度信息,方便搜索周边,查看周边相同应用等,一切与定位有关的都得使用CoreLocation库,而且,系统是不允许第三发定位的,当然可以使用第三方对其封装过的,如百度地图API的定位服务。
一.基本知识点
1.使用的基本库:CoreLocation 所以相关类都带有CL
2.主要操作的类:CLLocationManager 主要属性和方法如下
desiredAccuracy;//定位的精度设置(共6个)常用的值有kCLLocationAccuracyBest;//设备使用电池供电时的最高精度kCLLocationAccuracyNearestTenMeters;//精确到10米
distanceFilter;///设备移动后获得位置信息的最小距离
delegate//CLLocationMangerdelegate的委托协议(可用于返回定位位置信息或失败信息)
requestWhenInUseAuthorization;//弹出用户授权对话框,使用程序期间授权
requestAlwaysAuthorization;//始终授权
startUpdatingLocation;//开始定位
stopUpdatingLocation;//停止定位
具体使用建议参考官方文档及搜索:
CLLocationManager
Class Reference
二.注意点
在刚入门学习定位时,特别要注重细节和阅读官网文档,了解相关的类的属性和方法(特别是反复出错时)
1.在使用定位时需要配置plist文件,否则可能发生错误,在文件中新增以下属性用于用户在使用该应用是授权定位,但是该设置也可以调用CLLocatoinManager的方法实现
NSLocationWhenInUseUsageDescription//打开应用是开启定位
NSLocationAlwaysUsageDescription//一直开启定位
2.除了需要配置plist文件(有时没有导入也可以定位),还需要导入CoreLocation的framework如下图:
3.在使用的Swift文件的开始导入头文件->" import CoreLocation"
4.在进行实际开发时,获取定位,可以使用NSlock,运行时不受打扰。
5.扩展
CLLocation类:主要存储定位后的信息( coordinate.longitude:经度 coordinate.latitude:纬度 altitude:高度)
6.扩展学习参考:使用swift构建带有地理定位功能的APP
7.如果定位失败原因,
请检查a.调试定位功能没有开启。解决:模拟器的Debug->Location是否打开(即不选None)
b.应用地理位置访问权限不够。 解决:初次使用应用先回到模拟器首页(Shift+COM+H),进入设置->privacy->Location Services->下面的应用列表的该应用是否选择Always.
c.还有可能是自定义经纬度不符合(error:kCLErrorDomain的错误,当然得调用协议中的定位失败返回错误方法))
三.使用主要步骤
1.配置好相关,导入头文件,控制器遵守CLLocationManagerDelegate委任代理
2.生成CLLocationMananger的对象
3.设置CLLocation属性和某些方法的调用
4.实现CLLocationDelegate的方法回掉,didUpdateLocations获取定位信息或者错误信息
四.代码参考
- import UIKit
- import CoreLocation
- class ViewController: UIViewController ,CLLocationManagerDelegate{
- let locationManager = CLLocationManager()
- var currentLocation:CLLocation!
- var lock = NSLock()
- override func viewDidLoad() {
- super.viewDidLoad()
- locationManager.delegate = self
- locationManager.desiredAccuracy = kCLLocationAccuracyBest //定位精确度(最高)一般有电源接入,比较耗电
- //kCLLocationAccuracyNearestTenMeters;//精确到10米
- locationManager.distanceFilter = 50 //设备移动后获得定位的最小距离(适合用来采集运动的定位)
- locationManager.requestWhenInUseAuthorization()//弹出用户授权对话框,使用程序期间授权(ios8后)
- //requestAlwaysAuthorization;//始终授权
- locationManager.startUpdatingLocation()
- print("开始定位》》》")
- }
- override func didReceiveMemoryWarning() {
- super.didReceiveMemoryWarning()
- // Dispose of any resources that can be recreated.
- }
- /**
- * CLlocationDelegate
- */
- //委托传回定位,获取最后一个
- func locationManager(manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
- lock.lock()
- currentLocation = locations.last //注意:获取集合中最后一个位置
- print("定位经纬度为:\(currentLocation.coordinate.latitude)")
- //一直发生定位错误输出结果为0:原因是我输出的是currentLocation.altitude(表示高度的)而不是currentLoction.coordinate.latitude(这个才是纬度)
- print(currentLocation.coordinate.longitude)
- lock.unlock()
- }
- func locationManager(manager: CLLocationManager, didFailWithError error: NSError) {
- print("定位出错拉!!\(error)")
- }
- }
使用CoreLocation进行定位(Swift版)的更多相关文章
- Swift版iOS游戏框架Sprite Kit基础教程下册
Swift版iOS游戏框架Sprite Kit基础教程下册 试读下载地址:http://pan.baidu.com/s/1qWBdV0C 介绍:本教程是国内唯一的Swift版的Spritekit教程. ...
- Swift版音乐播放器(简化版),swift音乐播放器
这几天闲着也是闲着,学习一下Swift的,于是到开源社区Download了个OC版的音乐播放器,练练手,在这里发扬开源精神, 希望对大家有帮助! 这个DEMO里,使用到了 AudioPlayer(对音 ...
- 快速排序OC、Swift版源码
前言: 你要问我学学算法在工作当中有什么用,说实话,当达不到那个地步的时候,可能我们不能直接的感觉到它的用处!你就抱着这样一个心态,当一些APP中涉及到算法的时候我不想给其他人画界面!公司的项目也是暂 ...
- iOS可视化动态绘制八种排序过程(Swift版)
前面几篇博客都是关于排序的,在之前陆陆续续发布的博客中,我们先后介绍了冒泡排序.选择排序.插入排序.希尔排序.堆排序.归并排序以及快速排序.俗话说的好,做事儿要善始善终,本篇博客就算是对之前那几篇博客 ...
- swift版的CircleView
swift版的CircleView 效果图 源码 // // CircleView.swift // CircleView // // Created by YouXianMing on 15/10/ ...
- swift版的GCD封装
swift版的GCD封装 说明 本人针对swift封装了GCD,包括GCDQueue,GCDGroup,GCDTimer以及GCDSemaphore,使用较为便利. 源码 https://github ...
- swift版的StringAttribute
swift版的StringAttribute 效果 源码 https://github.com/YouXianMing/Swift-StringAttribute // // StringAttrib ...
- swift版的元组
swift版的元组 说明 元组的内容并不多,使用的话跟普通变量类似,以下是测试源码: // // ViewController.swift // Tuples // // Created by You ...
- swift版的枚举变量
swift版的枚举变量 swift的枚举类型跟普通的类是极为类似的,使用的时候,请不要以为他是一个常量,以下是测试用源码 // // ViewController.swift // SwiftEnum ...
- 关东升的iOS实战系列图书 《iOS实战:入门与提高卷(Swift版)》已经上市
承蒙广大读者的厚爱我的 <iOS实战:入门与提高卷(Swift版)>京东上市了,欢迎广大读者提出宝贵意见.http://item.jd.com/11766718.html ...
随机推荐
- 父子组件通信(vuex的方式)
转: https://blog.csdn.net/lzh5997/article/details/80407518 父子组件也可以通过vuex的进行来进行中转,其实vuex就类似与一个仓库,父组件把东 ...
- 51+Nokia5110
#include<reg52.h> #include <intrins.h> #define uchar unsigned char #define uint unsigned ...
- Bootstrap历练实例:popover插件中的方法
方法 下面是一些弹出框(Popover)插件中有用的方法: 方法 描述 实例 Options: .popover(options) 向元素集合附加弹出框句柄. $().popover(options) ...
- for循环语句中的先后执行顺序
for(int i=0;i<10;i++){ cout<<i; } 分析程序运行结果:for(cout<<"a";cout<<" ...
- Express中间件简单的实现原理
上一篇理解Express的使用之后, 再总结一篇Express中间件的简单实现原理. 我们知道Express中间件就是一个个的函数, 那么怎么让这些函数有序的执行呢? 那就需要我们调用 next 函数 ...
- 51nod——1640 天气晴朗的魔法 有边权限制的最大生成树
好好读题嗷:“所以我们要求阵中的魔法链的魔力值最大值尽可能的小,与此同时,魔力值之和要尽可能的大.” 第一条件是生成树的最大边权更小,第二条件是在最大边权的限制下搞一个最大生成树. 至于最大生成树,如 ...
- pyhon之99乘法表
1.长方形完整格式 for i in range(1,10): for j in range(1,10): print("%d*%d" %(j,i),end=" &quo ...
- 三步搞定Vmware固定虚拟机的IP
1.修改vmware的虚拟网络编辑器 按照图中红色方框的方法设置,子网IP可以设置成自己想要的,点击NAT设置,记住网关IP. 2.进入centos虚拟机系统 编辑 vim /etc/sysconfi ...
- FLASH、SDRAM
1.flash: 闪存,掉电之后里面的存储数据不会丢失,在嵌入式系统中用作存储Bootloader以及操作系统或者程序代码或者直接当硬盘使用(U盘).一般主要使用的FLASH有NOR flash和NA ...
- P1616 疯狂的采药【模板】
此题为NOIP2005普及组第三题的疯狂版. 此题为纪念LiYuxiang而生. 题目描述 LiYuxiang是个天资聪颖的孩子,他的梦想是成为世界上最伟大的医师.为此,他想拜附近最有威望的医师为师. ...