zoukankan      html  css  js  c++  java
  • Swift使用CoreLocation,你必须要看这一篇

    CoreLocation,在我们这里讨论的是一个最常用的东西,就是用Location Manger获取用户当前的位置。

    整个的来说非常简单。只要这样:

    import CoreLocation

    需要使用整个框架,那么引入整个框架就是必须的。然后需要在你的类里实现一个protocol。就是CLLocationManagerDelegate,并在代码中实现protocol里的相关方法。分别是这样喝这样:

    class ViewController: UIViewController, CLLocationManagerDelegate 
        //MARK: CoreLocationManagerDelegate
        func locationManager(manager: CLLocationManager!, didUpdateLocations locations: [AnyObject]!){
            println("get location")
            var location:CLLocation = locations[locations.count-1] as CLLocation
            
            if (location.horizontalAccuracy > 0) {
                self.locationManager.stopUpdatingLocation()
                println(location.coordinate)
    
                self.textLabel.text = "latitude (location.coordinate.latitude) longitude (location.coordinate.longitude)"
            }
        }
        
        func locationManager(manager: CLLocationManager!, didFailWithError error: NSError!) {
            println(error)
            self.textLabel.text = "get location error"
        }

    这些代码的功能也很简单。获取用户的经度和纬度,之后在界面的UILabel中显示出来。

    在viewWillAppear中开始获取地理位置,在viewDidDisappear里停止。手机费电的几个地方就包括地理位置过度频繁的更新这一项。所以,一定要记得不用的时候就不要再请求系统的GPS数据。否则,用户在设置的费电大户里是看得到的。

        override func viewWillAppear(animated: Bool) {
            super.viewWillAppear(animated)
            self.locationManager.startUpdatingLocation()
        }
        
        override func viewDidDisappear(animated: Bool) {
            super.viewDidDisappear(animated)
            self.locationManager.stopUpdatingLocation()
        }

    只有这些代码还是没有办法工作的。因为,在iOS8里修改了政策。Look here 

    if self.locationManager.respondsToSelector("requestAlwaysAuthorization") {
                println("requestAlwaysAuthorization")
                self.locationManager.requestAlwaysAuthorization()
            }

    这个是为了兼容iOS7和iOS8的代码,加入了一个判断。在iOS8中需要询问用户是否同意使用位置信息,否则的话该功能不可用。那么加这个就可以么?NO!!!还需要在,这里就是重点了。在plist文件里配置一个选项。

    说到具体的配置有两个,分别是:requestWhenInUseAuthorization()和requestAlwaysAuthorization()这两个请求方法。一个是用户使用的时候才用到定位,一个是一直在后台获取更新的定位信息。最后的一个在一定的时候会触发一个系统的提醒,说这个APP一直在后台获取你的位置信息是否允许之类的。这两个请求方法对应的plist配置也不一样,分别是NSLocationAlwaysUsageDescriptionNSLocationWhenInUseUsageDescription。至于在plist添加的方法,就是在plist中添加一个键值对,然后把请求允许对应的Key值复制粘贴进去就可以了。value值是什么都可以,这个值会在请求允许的对话框中显示出来给用户看。总之是你自己定的。

    运行你的APP,你会看到请求提示了:

  • 相关阅读:
    [转]Java中的POJO类
    使用PD进行数据库建模时的问题
    N-Gram模型
    [转] C#开源项目大全
    HTTP Error 503. The service is unavailable.
    abp 取消权限校验
    Oracle expdp/impdp导出导入命令及数据库备份(转)
    Oracle ORA-14102: 只能指定一个 LOGGING 或 NOLOGGING 子句
    Oracle ORA-01940: 无法删除当前连接的用户
    Oracle 把查询的多个字段赋值给多个变量
  • 原文地址:https://www.cnblogs.com/sunshine-anycall/p/4147165.html
Copyright © 2011-2022 走看看