当前位置: 首页 > article >正文

使用CoreLocation进行定位(Swift版)

使用CoreLocation进行定位(Swift版)

在应用开发中,很多情况需要我们获取到当前的位置和高度信息,方便搜索周边,查看周边相同应用等,一切与定位有关的都得使用CoreLocation库,而且,系统是不允许第三发定位的,当然可以使用第三方对其封装过的,如百度地图API的定位服务。

一.基本知识点

1.CoreLocation :定位核心框架,使用系统定位时需要import CoreLocation,使用第三发封住也要记得添加作为依赖库。 所有定位相关的都要CL前缀。

2.CLLocationManager:定位管理

   主要属性和方法如下

desiredAccuracy;//定位的精度设置(共6个)常用的值kCLLocationAccuracyBest;//设备使用电池供电时的最高精度kCLLocationAccuracyNearestTenMeters;//精确到10米

distanceFilter;///设备移动后获得位置信息的最小距离

delegate//CLLocationMangerdelegate的委托协议(可用于返回定位位置信息或失败信息)

requestWhenInUseAuthorization;//弹出用户授权对话框,使用程序期间授权

requestAlwaysAuthorization;//始终授权

startUpdatingLocation;//开始定位

stopUpdatingLocation;//停止定位

具体使用建议参考官方文档及搜索:

CLLocationManager Class Reference

官网搜索

二.定位配置与注意

在刚入门学习定位时,特别要注重细节和阅读官网文档。

1.配置plist文件,

定位时需要权限请求的,需要在相关字段设置权限请求,

否则可能发生错误,在文件中新增以下属性用于用户在使用该应用是授权定位,但是该设置也可以调用CLLocatoinManager的方法实现

iOS 11之前:

NSLocationWhenInUseUsageDescription//打开应用是开启定位


NSLocationAlwaysUsageDescription//一直开启定位


iOS 11之后设置:

添加字段:Privacy - Location Always Usage Description  //String 请求时候的描述

和 Privacy - Location When In Use Usage Description  //权限请求时的描述

后台定位:Privacy - Location Always and When In Use Usage Description   //权限请求时的描述[注意后台定位请求苹果审核应用时比较严格,谨慎使用]


2.除了需要配置plist文件(有时没有导入也可以定位),还需要导入CoreLocation的framework(特别是手动导入第三方定位SDK的时候)

如下图:


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 = selflocationManager.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)")}}




http://www.lryc.cn/news/2413246.html

相关文章:

  • 盘点10个一天可以收入100元的副业,让你生活多一份收入
  • nyist 第二次招新赛 I 董学姐与朱学姐的爱恨情仇
  • ubuntu12.04完美安装QQ2012、QQMusic、Foxmail等
  • 回溯算法背包问题(java实现)
  • flash 旋转效果
  • 如何清除木马--104种木马手工清除方法
  • 为什么 John Nash 挨了打
  • 1-思科IOS设备管理
  • 周鸿祎:江湖最后一个大佬
  • ESD与压敏电阻的性能对比
  • 新手入门matlab之线性系统的时域分析
  • android pad刷机,平板刷机图文教程详解!小编手把手教你安卓平板电脑怎么刷机
  • CSS中div布局position以及水平居中
  • 对Carrier IQ木马的综合分析报告
  • 【乡巴佬】四步打造属于自己的WindwosXP系统个性鼠标
  • 史上最全的arduino实验集锦
  • MOTO 国行ME525升级Android2.3.4教程
  • vs2005操作水晶报表(入门示例)
  • 属兔的人今日运势-360星座网_【生肖运势】12月22日十二生肖运势解析
  • miui12 android版本,miui12基于安卓几版本开发的?miui12是安卓11吗
  • R语言均匀分布函数uniform Distribution(dunif, punif, qunif runif)实战
  • 杂谈(主机名、ip地址、域名的区别)(16)
  • 实验四
  • UDP、TCP/IP详解
  • sql使用小技巧之约束(Constraints、NOT NULL、UNIQUE、PRIMARY KEY)简单了解下
  • CSS 高度(css height)
  • 二分法(c语言)
  • 免费PHP空间整理
  • Microsoft .NET Framework v4.7.1 离线安装包应用程序
  • html caption属性,html元素caption标签的使用方法及作用