使用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 ...
随机推荐
- 集成Ehcache用来缓存表以后,怎么设置缓存刷新时间
问答 集成Ehcache用来缓存表以后,怎么设置缓存刷新时间 发布于 217天前 作者 老司机 93 次浏览 复制 上一个帖子 下一个帖子 标签: 无 集成Ehcache用来缓存表以后, ...
- hdu-1875 畅通工程再续---MST
题目链接: https://vjudge.net/problem/HDU-1875 题目大意: 相信大家都听说一个“百岛湖”的地方吧,百岛湖的居民生活在不同的小岛中,当他们想去其他的小岛时都要通过划小 ...
- geoNear查询 near查询的升级版
geoNear查询可以看作是near查询点进化版 geoNear查询使用runCommand命令进行使用,常用使用如下: db.runCommand({ geoNear:<collection& ...
- @TransactionConfiguration过时与替代写法
在使用了Spring的项目中做单元测试时,以前的标准写法是这样的: 但是在高版本的Spring框架中(Spring4.2以后),@TransactionConfiguration已经标注为过时的注解, ...
- 由一道CTF pwn题深入理解libc2.26中的tcache机制
本文首发安全客:https://www.anquanke.com/post/id/104760 在刚结束的HITB-XCTF有一道pwn题gundam使用了2.26版本的libc.因为2.26版本中加 ...
- 零基础快速入门SpringBoot2.0 (一)
零基础快速入门SpringBoot2.0 (一) 一.SpringBoot2.x依赖环境和版本新特性说明 简介:讲解新版本依赖环境和springboot2新特性概述 1.依赖版本jdk8以上, Spr ...
- git与github账号建立SSH连接
第1步:创建SSH Key.在用户主目录下,(就是在你的工作空间一层)看看有没有.ssh目录,如果有,再看看这个目录下有没有id_rsa和id_rsa.pub这两个文件,如果已经有了,可直接跳到下一步 ...
- 抽屉head部分,hover应用,鼠标放上变色
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- java的重写(Override) (2013-10-11-163 写的日志迁移
/* *说明方法的重写(又称方法的覆盖)子类并不想原封不动地继承父类的方法,而是想作一定的修改 */ package czbk.jxy.study; /** * @author Archon * @d ...
- 第39-43课 thinkphp5完成商品会员价格功能(后置勾子afterInsert)
目录 功能一:利用后置勾子,处理好商品主键id,会员的价格,再插入member_price表里. 要实现的功能: 思路: html里 控制器里 模型里的后置勾子afterInsert() 功能二:利用 ...