在应用开发中,很多情况需要我们获取到当前的位置和高度信息,方便搜索周边,查看周边相同应用等,一切与定位有关的都得使用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获取定位信息或者错误信息

四.代码参考

    1. import UIKit
    2. import CoreLocation
    3. class ViewController: UIViewController ,CLLocationManagerDelegate{
    4. let locationManager = CLLocationManager()
    5. var currentLocation:CLLocation!
    6. var lock = NSLock()
    7. override func viewDidLoad() {
    8. super.viewDidLoad()
    9. locationManager.delegate = self
    10. locationManager.desiredAccuracy = kCLLocationAccuracyBest //定位精确度(最高)一般有电源接入,比较耗电
    11. //kCLLocationAccuracyNearestTenMeters;//精确到10米
    12. locationManager.distanceFilter = 50 //设备移动后获得定位的最小距离(适合用来采集运动的定位)
    13. locationManager.requestWhenInUseAuthorization()//弹出用户授权对话框,使用程序期间授权(ios8后)
    14. //requestAlwaysAuthorization;//始终授权
    15. locationManager.startUpdatingLocation()
    16. print("开始定位》》》")
    17. }
    18. override func didReceiveMemoryWarning() {
    19. super.didReceiveMemoryWarning()
    20. // Dispose of any resources that can be recreated.
    21. }
    22. /**
    23. *  CLlocationDelegate
    24. */
    25. //委托传回定位,获取最后一个
    26. func locationManager(manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
    27. lock.lock()
    28. currentLocation = locations.last    //注意:获取集合中最后一个位置
    29. print("定位经纬度为:\(currentLocation.coordinate.latitude)")
    30. //一直发生定位错误输出结果为0:原因是我输出的是currentLocation.altitude(表示高度的)而不是currentLoction.coordinate.latitude(这个才是纬度)
    31. print(currentLocation.coordinate.longitude)
    32. lock.unlock()
    33. }
    34. func locationManager(manager: CLLocationManager, didFailWithError error: NSError) {
    35. print("定位出错拉!!\(error)")
    36. }
    37. }

使用CoreLocation进行定位(Swift版)的更多相关文章

  1. Swift版iOS游戏框架Sprite Kit基础教程下册

    Swift版iOS游戏框架Sprite Kit基础教程下册 试读下载地址:http://pan.baidu.com/s/1qWBdV0C 介绍:本教程是国内唯一的Swift版的Spritekit教程. ...

  2. Swift版音乐播放器(简化版),swift音乐播放器

    这几天闲着也是闲着,学习一下Swift的,于是到开源社区Download了个OC版的音乐播放器,练练手,在这里发扬开源精神, 希望对大家有帮助! 这个DEMO里,使用到了 AudioPlayer(对音 ...

  3. 快速排序OC、Swift版源码

    前言: 你要问我学学算法在工作当中有什么用,说实话,当达不到那个地步的时候,可能我们不能直接的感觉到它的用处!你就抱着这样一个心态,当一些APP中涉及到算法的时候我不想给其他人画界面!公司的项目也是暂 ...

  4. iOS可视化动态绘制八种排序过程(Swift版)

    前面几篇博客都是关于排序的,在之前陆陆续续发布的博客中,我们先后介绍了冒泡排序.选择排序.插入排序.希尔排序.堆排序.归并排序以及快速排序.俗话说的好,做事儿要善始善终,本篇博客就算是对之前那几篇博客 ...

  5. swift版的CircleView

    swift版的CircleView 效果图 源码 // // CircleView.swift // CircleView // // Created by YouXianMing on 15/10/ ...

  6. swift版的GCD封装

    swift版的GCD封装 说明 本人针对swift封装了GCD,包括GCDQueue,GCDGroup,GCDTimer以及GCDSemaphore,使用较为便利. 源码 https://github ...

  7. swift版的StringAttribute

    swift版的StringAttribute 效果 源码 https://github.com/YouXianMing/Swift-StringAttribute // // StringAttrib ...

  8. swift版的元组

    swift版的元组 说明 元组的内容并不多,使用的话跟普通变量类似,以下是测试源码: // // ViewController.swift // Tuples // // Created by You ...

  9. swift版的枚举变量

    swift版的枚举变量 swift的枚举类型跟普通的类是极为类似的,使用的时候,请不要以为他是一个常量,以下是测试用源码 // // ViewController.swift // SwiftEnum ...

  10. 关东升的iOS实战系列图书 《iOS实战:入门与提高卷(Swift版)》已经上市

             承蒙广大读者的厚爱我的 <iOS实战:入门与提高卷(Swift版)>京东上市了,欢迎广大读者提出宝贵意见.http://item.jd.com/11766718.html ...

随机推荐

  1. Java生成不重复的随机数

    public class test { public static int[] Randoms(int number) { Random rand = new Random(); //创建一个新随机数 ...

  2. maven操作手册

    ===Maven的安装=== http://blog.csdn.net/yang5726685/article/details/56486479 ===Maven的jar包仓库地址配置=== http ...

  3. Oracle11g 主机身份证明问题

    oracle 11g的web database control中,进行一些操作需要主机身份证明,比如进行数据备份.数据的导出导入等;这样对于数据库的安全增强了一定的保证.如果我们有进行适当的配置,可以 ...

  4. java基础编程——链表反转

    题目描述 输入一个链表,按链表值从尾到头的顺序返回一个ArrayList.   题目代码 /** * @program: JavaCode * @description:输入一个链表,按链表值从尾到头 ...

  5. BZOJ2287: 【POJ Challenge】消失之物(背包dp)

    题意 ftiasch 有 N 个物品, 体积分别是 W1, W2, ..., WN. 由于她的疏忽, 第 i 个物品丢失了. “要使用剩下的 N - 1 物品装满容积为 x 的背包,有几种方法呢?” ...

  6. celery:Unrecoverable error: AttributeError("'unicode' object has no attribute 'iteritems')

    环境描述 python2+django1.9下使用celery异步处理耗时请求. celery使用的是celery-with-redis这个第三方库,版本号为3.0. pip install cele ...

  7. mysql基础,数据表的类型

  8. GPIO实现I2C协议模拟(2)

    接着上一节继续补充 结合上一节的描述 写Slave的过程如下(BYTE) 读Slave的过程如下(BYTE) 分为两段 第一段 ,写OFFSET,第二段读数据 WORD的方式与BYTE大同异 读行为 ...

  9. HashMap原理以及自己实现HashMap

    1.HashMap是什么? HashMap是java常用来存储键值对的数据结构,它是以key/value的形式存储的,它不是线程安全的,Key可以为null值. 2.HashMap的实现原理 Hash ...

  10. nuxt.js服务端缓存lru-cache

    对于部分网页进行服务端的缓存,可以获得更好的渲染性能,但是缓存又涉及到一个数据的及时性的问题,所以在及时性和性能之间要有平衡和取舍. 官方文档里面写的使用方法 按照这个配置,试过了没什么用,但是从文档 ...