您的位置:首页 > 移动开发 > IOS开发

iOS SDK详解之地理位置(一)基本使用

2015-10-19 11:55 543 查看
原创Blog,转载请注明出处

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: //位置响应失败
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  iOS location 位置