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

原创Blog,转载请注明出处
http://blog.csdn.net/hello_hwc?viewmode=list
我的stackoverflow

profile for Leo on Stack Exchange, a network of free, community-driven Q&A sites


前言:地理位置编程是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协议

  1. CLLocationManager-核心类,负责开始结束位置监听,监听的精度等等,位置编程就是围绕这个类的。
  2. CLLocationManagerDelegate - 核心协议,负责响应各种位置相关的事件
  3. CLLocation-辅助类,封装了经纬度信息,精度,采集的时间戳等信息
  4. CLGeocoder - 辅助类,将经纬度信息(通常是CLLocation对象)转换为用户有好的信息(具体的地址信息)
  5. 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: //位置响应失败
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值