iOS SDK详解之地理位置(一)基本使用
2015-10-19 11:55
543 查看
原创Blog,转载请注明出处
http://blog.csdn.net/hello_hwc?viewmode=list
我的stackoverflow
前言:地理位置编程是iOS开发中常用的技术。常用的就是定位获取当前的位置,部分App需要动态监听地理位置变化以及导航。本文以获取当前的地理位置为例,进而详细讲解位置编程相关的类。
添加plist请求权限
一共两种
NSLocationWhenInUseUsageDescription 仅仅在App开启的时候使用地理位置
NSLocationAlwaysUsageDescription 一直使用地理位置
Demo中使用前一种
注意,描述的文字在ScrollView中
代码
通过上述代码,可以看到几个主要类or协议
CLLocationManager-核心类,负责开始结束位置监听,监听的精度等等,位置编程就是围绕这个类的。
CLLocationManagerDelegate - 核心协议,负责响应各种位置相关的事件
CLLocation-辅助类,封装了经纬度信息,精度,采集的时间戳等信息
CLGeocoder - 辅助类,将经纬度信息(通常是CLLocation对象)转换为用户有好的信息(具体的地址信息)
CLPlacemark - 辅助类,封装了具体的位置信息,例如国家,城市,地理位置,时区。
按照指定精度跟踪用户的地理位置变化
监听用户进入或者离开指定区域
后台监听用户位置变化(这个会在下一篇详细阐述)
获取附近的iBeacons
相关的API
授权相关
GPS芯片能力相关
其余的API用来控制开始/结束监听,这里不多阐述了,看看文档自然就知道了。有一个API要提一下
http://blog.csdn.net/hello_hwc?viewmode=list
我的stackoverflow
前言:地理位置编程是iOS开发中常用的技术。常用的就是定位获取当前的位置,部分App需要动态监听地理位置变化以及导航。本文以获取当前的地理位置为例,进而详细讲解位置编程相关的类。
注意:只有实际设备才能访问地理位置,模拟器不行。
举个例子-如何获取当前地理位置(iOS 8+)
效果添加plist请求权限
一共两种
NSLocationWhenInUseUsageDescription 仅仅在App开启的时候使用地理位置
NSLocationAlwaysUsageDescription 一直使用地理位置
Demo中使用前一种
注意,描述的文字在ScrollView中
代码
import UIKit import CoreLocation class ViewController: UIViewController,CLLocationManagerDelegate { let locationManager = CLLocationManager() @IBOutlet weak var demoLabel: UILabel! override func viewDidLoad() { super.viewDidLoad() self.locationManager.delegate = self self.locationManager.requestWhenInUseAuthorization() } func locationManager(manager: CLLocationManager, didChangeAuthorizationStatus status: CLAuthorizationStatus) { if status == CLAuthorizationStatus.AuthorizedWhenInUse{ print("授权成功"); self.locationManager.requestLocation() }else if status == CLAuthorizationStatus.Denied{ print("授权失败") } } func locationManager(manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) { let reverseCoder = CLGeocoder() reverseCoder.reverseGeocodeLocation(locations.first!) { (placemarks, error) -> Void in let mark = placemarks!.first let countryName = mark?.country let cityName = mark?.locality; print(countryName! + cityName!) self.demoLabel.text = mark?.name } } func locationManager(manager: CLLocationManager, didFailWithError error: NSError) { print(error.localizedDescription) } }
通过上述代码,可以看到几个主要类or协议
CLLocationManager-核心类,负责开始结束位置监听,监听的精度等等,位置编程就是围绕这个类的。
CLLocationManagerDelegate - 核心协议,负责响应各种位置相关的事件
CLLocation-辅助类,封装了经纬度信息,精度,采集的时间戳等信息
CLGeocoder - 辅助类,将经纬度信息(通常是CLLocation对象)转换为用户有好的信息(具体的地址信息)
CLPlacemark - 辅助类,封装了具体的位置信息,例如国家,城市,地理位置,时区。
CLLocationManager
通过这个类可以进行如下的地理位置相关编程按照指定精度跟踪用户的地理位置变化
监听用户进入或者离开指定区域
后台监听用户位置变化(这个会在下一篇详细阐述)
获取附近的iBeacons
相关的API
授权相关
- requestWhenInUseAuthorization //请求授权 - requestAlwaysAuthorization + authorizationStatus //授权状态 + locationServicesEnabled//用户是否禁用了位置service
GPS芯片能力相关
+ deferredLocationUpdatesAvailable / + significantLocationChangeMonitoringAvailable//能否进行重大位置变化事件监听 + headingAvailable //能否进行方向监听 + isMonitoringAvailableForClass//能否监听区域 + isRangingAvailable//能否监听Ibeacon
其余的API用来控制开始/结束监听,这里不多阐述了,看看文档自然就知道了。有一个API要提一下
- requestLocation//请求一次地理位置,然后自动关闭,适用于很多场景。请求成功在`locationManager:didUpdateLocations:`响应。请求失败在`locationManager:didFailWithError:`中响应
CLLocationManagerDelegate
常用的就是三个方法- locationManager:didChangeAuthorizationStatus: //监听权限的变化 - locationManager:didUpdateLocations: //有位置更新,也是唯一一个获取到位置的接口 - locationManager:didFailWithError: //位置响应失败
相关文章推荐
- 峰回路转,Firefox 浏览器即将重返 iOS 平台
- 峰回路转,Firefox 浏览器即将重返 iOS 平台
- 不可修补的 iOS 漏洞可能导致 iPhone 4s 到 iPhone X 永久越狱
- iOS 12.4 系统遭黑客破解,漏洞危及数百万用户
- 每日安全资讯:NSO,一家专业入侵 iPhone 的神秘公司
- [转][源代码]Comex公布JailbreakMe 3.0源代码
- 关于H1的位置解析
- JS option location 页面跳转实现代码
- C#查找对象在ArrayList中出现位置的方法
- JavaScript中的Location地址对象
- JavaScript获取元素尺寸和大小操作总结
- window.location不跳转的问题解决方法
- 用Javascript 获取页面元素的位置的代码
- JS location几个方法小姐
- document.write()及其输出内容的样式、位置控制
- juqery 学习之六 CSS--css、位置、宽高
- 关于js中window.location.href,location.href,parent.location.href,top.location.href的用法与区别
- Javascript获取窗口(容器)的大小及位置参数列举及简要说明
- JS教程:window.location使用方法的区别介绍