使用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 ...
随机推荐
- 调试工具DEBUG的使用(8086)
有关CPU和存储单元的概念在前一节我们已经了解,那么如何观察实际机器内部的情况呢?能不能看到具体的寄存器.标志.存储单元的内容呢?可不可以修改和控制它们呢? DEBUG这个有力工具,就可以深入到机器内 ...
- Hystrix + Hystrix Dashboard搭建(Spring Cloud 2.X)
本机IP为 192.168.1.102 一.搭建Hystrix Dashboard 1. 新建 Maven 项目 hystrix-dashboard 2. pom.xml <projec ...
- kubernetes-控制器Deployment和DaemonSet(八)
Pod与controllers的关系 •controllers:在集群上管理和运行容器的对象•通过label-selector相关联•Pod通过控制器实现应用的运维,如伸缩,升级等 控制器又称工作负载 ...
- c++ 软件下载 Dev cpp下载
下载地址: 链接: https://pan.baidu.com/s/1hsiWQPY 密码: bdpn
- 32-3题:LeetCode103. Binary Tree Zigzag Level Order Traversal锯齿形层次遍历/之字形打印二叉树
题目 给定一个二叉树,返回其节点值的锯齿形层次遍历.(即先从左往右,再从右往左进行下一层遍历,以此类推,层与层之间交替进行). 例如: 给定二叉树 [3,9,20,null,null,15,7], 3 ...
- 51nod——2476 小b和序列(预处理 思维)
对于每一个元素,预处理出它作为最小值,两边可以作用到的最大位置.比如下标∈[0,8]的这个数组:1 8 6 2 5 4 3 8 7,1可以作用到所有区间,2可以作用到区间[1,8],第一个8可以作用到 ...
- 初学puppet
初学puppet puppet是什么? puppet是一个开源的软件自动化配置和部署工具,很多大型IT公司均在使用puppet对集群中的软件进行管理和部署. Puppet简介 Puppet的目录是让管 ...
- DevOps - 配置管理 - Chef
#!/bin/sh # WARNING: REQUIRES /bin/sh # # - must run on /bin/sh on solaris 9 # - must run on /bin/sh ...
- mybatis中实现动态SQL
动态SQL语句,也就意味着SQL语句不在是一成不变的而是具有多样性. if if的用法还是跟平常差不多的(不过没有else if也没有else) <update id="modify& ...
- 17.VUE学习之- v-for指令的使用方法
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...