代码示例
class ViewController: UIViewController {
lazy var locateM : CLLocationManager = {
let locate = CLLocationManager()
locate.delegate = self
locate.requestAlwaysAuthorization()
if #available(iOS 9.0, *) {
locate.allowsBackgroundLocationUpdates = true
}
return locate
}()
override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {
self.locateM.startUpdatingLocation()
}
}
extension ViewController : CLLocationManagerDelegate{
func locationManager(manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
print("位置信息已经更新")
}
}
4、权限改变的通知
注意:在Denied或者NotDetermined的状态下startUpdatingLocation,开始监听之后,当状态改变成允许的状态时,会直接进入监听状态,不必再次调用startUpdateingLocation
func locationManager(manager: CLLocationManager, didChangeAuthorizationStatus status: CLAuthorizationStatus) {
switch status {
case .AuthorizedAlways:
print("始终")
case .AuthorizedWhenInUse:
print("使用的时候")
case .Denied:
print("拒绝")
if CLLocationManager.locationServicesEnabled() {
print("真拒绝了")
}else{
print("是关闭了定位服务")
}
case .NotDetermined:
print("第一次,尚未决定")
case .Restricted:
print("没有权限的")
}
}
5、过滤距离
很多时候我们需要监听函数只调用一次来获取用户当前的位置
在监听函数中停止监听
设置监听的过滤距离
//如果监听器已经开启,此值修改之后立即生效
self.locateM.distanceFilter = 100 //每100米,调用一次监听
6、精度
注意:越精确越耗电,定位的时间越长,如果要定位城市,没有必要选最精确的
self.locateM.desiredAccuracy = kCLLocationAccuracyBest
//kCLLocationAccuracyBestForNavigation
//kCLLocationAccuracyBest
//kCLLocationAccuracyNearestTenMeters
//kCLLocationAccuracyHundredMeters
//kCLLocationAccuracyKilometer
//kCLLocationAccuracyThreeKilometers
7.CLLocation详解
public var coordinate: CLLocationCoordinate2D { get } //经纬度
public var altitude: CLLocationDistance { get } //海拔
public var horizontalAccuracy: CLLocationAccuracy { get } //位置信息是否有效,如果为负数,则无效
public var verticalAccuracy: CLLocationAccuracy { get } //海拔数据是否有效,如果为负数,则无效
public var course: CLLocationDirection { get } //当前的角度(0-359.9)
public var speed: CLLocationSpeed { get } //当前的速度
public var timestamp: NSDate { get } //位置确定的时间戳
public var floor: CLFloor? { get } //楼层(前提是已经注册的建筑),如果没有为nil
//计算两个经纬度之间的距离
public func distanceFromLocation(location: CLLocation) -> CLLocationDistance










