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

    .net reflector是一个反编译DLL的工具,在安装后如果电脑上有VS也会同时安装到VS里面,但是他是收费的,虽然反编译的效果很好,但是运行VS2013时(或许其他版本也有这样的问题)如果项目 ...

  2. Using Autorelease Pool Blocks

    https://developer.apple.com/library/content/documentation/Cocoa/Conceptual/MemoryMgmt/Articles/mmAut ...

  3. scikit-learn 中 OneHotEncoder 解析

    概要 在 sklearn 包中,OneHotEncoder 函数非常实用,它可以实现将分类特征的每个元素转化为一个可以用来计算的值.本篇详细讲解该函数的用法,也可以参考官网 sklearn.prepr ...

  4. 关于微信小程序 textarea组件在fixed定位的模块中随页面移动问题

    具体的情况: 在模拟器中没问题,可是在真机下就出现以下问题,  <textarea  />在一个view盒子中,view盒子是固定定位,页面滑动时候,固定定位的盒子会定在屏幕的相对位置,但 ...

  5. SummerVocation_Learning--java的多线程实现

    java的线程是通过java.lang.Thread类来实现的. 可以通过创建Thread的实例来创建新的线程. 每个线程都是通过某个特定Thread对象所对应的方法run()来完成操作,方法run( ...

  6. tcl之变量-unset 简单变量和数组

  7. [译]The Python Tutorial#11. Brief Tour of the Standard Library — Part II

    [译]The Python Tutorial#Brief Tour of the Standard Library - Part II 第二部分介绍更多满足专业编程需求的高级模块,这些模块在小型脚本中 ...

  8. python3.7 迭代器和生成器

    #!/usr/bin/env python __author__ = "lrtao2010" #python3.7 迭代器和生成器 #迭代器协议: ''' 1.迭代器协议是指:对象 ...

  9. P1616 疯狂的采药【模板】

    此题为NOIP2005普及组第三题的疯狂版. 此题为纪念LiYuxiang而生. 题目描述 LiYuxiang是个天资聪颖的孩子,他的梦想是成为世界上最伟大的医师.为此,他想拜附近最有威望的医师为师. ...

  10. P1605迷宫

    题目背景 迷宫 [问题描述] 给定一个N*M方格的迷宫,迷宫里有T处障碍,障碍处不可通过.给定起点坐标和 终点坐标,问: 每个方格最多经过1次,有多少种从起点坐标到终点坐标的方案.在迷宫 中移动有上下 ...