swift开发笔记18 - 获取当前位置坐标和地址

来源:互联网 发布:机械工艺制作软件 编辑:程序博客网 时间:2024/06/05 11:23

首先在info.plist里增加两行:NSLocationAlwaysUsageDescription和NSLocationWhenInUseUsageDescription,如下图中倒数3和4行


然后

import CoreLocation

给类增加代理:

CLLocationManagerDelegate

增加类属性:

//用于定位服务管理类,它能够给我们提供位置信息和高度信息,也可以监控设备进入或离开某个区域,还可以获得设备的运行方向

var locationManager : CLLocationManager!

var currLocation : CLLocation!

主要代码,总共三个函数:

 var locationManager : CLLocationManager!  var currLocation : CLLocation! override func viewDidLoad() {      //初始化位置管理器        locationManager = CLLocationManager()        locationManager.delegate = self        //设备使用电池供电时最高的精度        locationManager.desiredAccuracy = kCLLocationAccuracyBest        //精确到1000米,距离过滤器,定义了设备移动后获得位置信息的最小距离        locationManager.distanceFilter = kCLLocationAccuracyKilometer        if ios8() {          //如果是IOS8及以上版本需调用这个方法         locationManager.requestAlwaysAuthorization()        //使用应用程序期间允许访问位置数据         locationManager.requestWhenInUseAuthorization();       //启动定位         locationManager.startUpdatingLocation()    }}     //FIXME: CoreLocationManagerDelegate 中获取到位置信息的处理函数    func  locationManager(manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {          let location:CLLocation = locations[locations.count-1] as CLLocation        currLocation=location        if (location.horizontalAccuracy > 0) {            self.locationManager.stopUpdatingLocation()            print("wgs84坐标系  纬度: \(location.coordinate.latitude) 经度: \(location.coordinate.longitude)")            self.locationManager.stopUpdatingLocation()            print("结束定位")          }        //使用坐标,获取地址        let geocoder = CLGeocoder()        var p:CLPlacemark?        geocoder.reverseGeocodeLocation(currLocation, completionHandler: { (placemarks, error) -> Void in            if error != nil {                print("获取地址失败: \(error!.localizedDescription)")                return            }            let pm = placemarks! as [CLPlacemark]            if (pm.count > 0){                p = placemarks![0] as CLPlacemark                print("地址:\(p?.name!)")              }else{                print("没地址!")            }        })    }     //FIXME:  获取位置信息失败    func  locationManager(manager: CLLocationManager, didFailWithError error: NSError) {        print(error)      }

判断手机系统版本:

  func ios8() -> Bool {        var versionCode:String = UIDevice.currentDevice().systemVersion        let version = NSString(string:  versionCode).doubleValue        return version >= 8.0    }



2 0