• 使用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获取定位信息或者错误信息

    四.代码参考

    [objc] view plain copy
     在CODE上查看代码片派生到我的代码片
      1. import UIKit  
      2. import CoreLocation  
      3.   
      4. class ViewController: UIViewController ,CLLocationManagerDelegate{  
      5.   
      6.     let locationManager = CLLocationManager()  
      7.     var currentLocation:CLLocation!  
      8.     var lock = NSLock()  
      9.   
      10.     override func viewDidLoad() {  
      11.         super.viewDidLoad()  
      12.         locationManager.delegate = self  
      13.         locationManager.desiredAccuracy = kCLLocationAccuracyBest //定位精确度(最高)一般有电源接入,比较耗电  
      14.         //kCLLocationAccuracyNearestTenMeters;//精确到10米  
      15.         locationManager.distanceFilter = 5//设备移动后获得定位的最小距离(适合用来采集运动的定位)  
      16.         locationManager.requestWhenInUseAuthorization()//弹出用户授权对话框,使用程序期间授权(ios8后)  
      17.         //requestAlwaysAuthorization;//始终授权  
      18.         locationManager.startUpdatingLocation()  
      19.         print("开始定位》》》")  
      20.   
      21.     }  
      22.   
      23.     override func didReceiveMemoryWarning() {  
      24.         super.didReceiveMemoryWarning()  
      25.         // Dispose of any resources that can be recreated.  
      26.     }  
      27.   
      28.     /** 
      29.      *  CLlocationDelegate 
      30.      */  
      31.     //委托传回定位,获取最后一个  
      32.     func locationManager(manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {  
      33.         lock.lock()  
      34.         currentLocation = locations.last    //注意:获取集合中最后一个位置  
      35.         print("定位经纬度为:(currentLocation.coordinate.latitude)")  
      36.         //一直发生定位错误输出结果为0:原因是我输出的是currentLocation.altitude(表示高度的)而不是currentLoction.coordinate.latitude(这个才是纬度)  
      37.         print(currentLocation.coordinate.longitude)  
      38.         lock.unlock()  
      39.   
      40.     }  
      41.     func locationManager(manager: CLLocationManager, didFailWithError error: NSError) {  
      42.         print("定位出错拉!!(error)")  
      43.     }  
      44.   
  • 相关阅读:
    启用和配置 FILESTREAM
    SQL SERVER的锁机制(四)——概述(各种事务隔离级别发生的影响)
    SQL SERVER的锁机制(三)——概述(锁与事务隔离级别)
    系统性能测试 IO--AIX
    存储前端
    Markdown的css样式源码
    Typora +google + Markdown Here 公众号
    存储学习
    ChsLLVMDocs
    Parallel Database for OLTP and OLAP
  • 原文地址:https://www.cnblogs.com/ming1025/p/6155525.html
Copyright © 2020-2023  润新知