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

前端之家收集整理的这篇文章主要介绍了swift开发笔记18 - 获取当前位置坐标和地址前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

首先在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
    }

猜你在找的Swift相关文章