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,你会看到请求提示了:

 

欢迎加群互相学习,共同进步。QQ群:iOS: 58099570 | Android: 572064792 | Nodejs:329118122 做人要厚道,转载请注明出处!














本文转自张昺华-sky博客园博客,原文链接:http://www.cnblogs.com/sunshine-anycall/p/4147165.html ,如需转载请自行联系原作者


相关文章
|
3月前
|
安全 编译器 Swift
IOS开发基础知识: 对比 Swift 和 Objective-C 的优缺点。
IOS开发基础知识: 对比 Swift 和 Objective-C 的优缺点。
90 2
|
2月前
|
监控 API Swift
用Swift开发iOS平台上的上网行为管理监控软件
在当今数字化时代,随着智能手机的普及,人们对于网络的依赖日益增加。然而,对于一些特定场景,如家庭、学校或者企业,对于iOS设备上的网络行为进行管理和监控显得尤为重要。为了满足这一需求,我们可以利用Swift语言开发一款iOS平台上的上网行为管理监控软件。
181 2
|
3月前
|
监控 Swift iOS开发
局域网计算机监控软件中利用Swift构建iOS端的移动监控应用
在局域网计算机监控软件的开发中,构建iOS端的移动监控应用是一项关键任务。本文将介绍如何利用Swift语言实现这一目标,通过多个代码示例展示关键功能的实现。
223 1
|
3月前
|
安全 JavaScript 前端开发
IOS开发基础知识:介绍一下 Swift 和 Objective-C,它们之间有什么区别?
IOS开发基础知识:介绍一下 Swift 和 Objective-C,它们之间有什么区别?
65 0
|
5月前
|
JavaScript 前端开发 PHP
用swift开发ios移动端app应用初体验
直接跟着 apple 官方的 SwiftUI 教程跑的,写惯了 javascript 奔放的代码,很多语法理解起来还是有点费劲
57 1
|
7月前
|
Swift iOS开发
iOS OC混编Swift 后者无法走断点
iOS OC混编Swift 后者无法走断点
49 0
|
12月前
|
Swift iOS开发
IOS使用Swift加载Xib文件
IOS使用Swift加载Xib文件
245 0
|
Swift iOS开发
iOS开发 - 适合工程多环境切换(swift环境),适合经常打很多不同环境包的人
iOS开发 - 适合工程多环境切换(swift环境),适合经常打很多不同环境包的人
219 0
iOS开发 - 适合工程多环境切换(swift环境),适合经常打很多不同环境包的人
|
Swift 数据安全/隐私保护 iOS开发
iOS开发 - swift通过Alamofire实现https通信
iOS开发 - swift通过Alamofire实现https通信
343 0
iOS开发 - swift通过Alamofire实现https通信
|
Swift iOS开发 容器
iOS 仿支付宝银行卡界面(支持Swift/OC)
在有支付相关的APP中,都有对应的钱包,虽然现在的支付宝,微信支付很流行,但是都是需要绑定自己的银行卡,那么这个银行卡的卡包页面该怎么实现呢?在网上找了许久也没有找到合适的,那就索性自己造轮子。
323 0

相关课程

更多