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-] as CLLocation if (location.horizontalAccuracy > ) {
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,你会看到请求提示了:

Swift使用CoreLocation,你必须要看这一篇的更多相关文章

  1. APP的缓存文件到底应该存在哪?看完这篇文章你应该就自己清楚了

    APP的缓存文件到底应该存在哪?看完这篇文章你应该就自己清楚了 彻底理解android中的内部存储与外部存储 存储在内部还是外部 所有的Android设备均有两个文件存储区域:"intern ...

  2. 关于 Docker 镜像的操作,看完这篇就够啦 !(下)

    紧接着上篇<关于 Docker 镜像的操作,看完这篇就够啦 !(上)>,奉上下篇 !!! 镜像作为 Docker 三大核心概念中最重要的一个关键词,它有很多操作,是您想学习容器技术不得不掌 ...

  3. 【最短路径Floyd算法详解推导过程】看完这篇,你还能不懂Floyd算法?还不会?

    简介 Floyd-Warshall算法(Floyd-Warshall algorithm),是一种利用动态规划的思想寻找给定的加权图中多源点之间最短路径的算法,与Dijkstra算法类似.该算法名称以 ...

  4. Visual Studio Code(VS code)你们都在用吗?或许你们需要看一下这篇博文

    写在前面 在前端开发中,有一个非常好用的工具,Visual Studio Code,简称VS code. 都不用我安利VS code,大家就会乖乖的去用,无数个大言不惭的攻城狮,都被VS code比德 ...

  5. 你们都在用IntelliJ IDEA吗?或许你们需要看一下这篇博文

    写在前面 以前一直用的elipce,如今入坑IntelliJ IDEA,没想到啊.深深的爱上了它,强大到无所不能: "工欲善其事必先利其器",IntelliJ IDEA作为一个非常 ...

  6. 当初要是看了这篇,React高阶组件早会了

    当初要是看了这篇,React高阶组件早会了. 概况: 什么是高阶组件? 高阶部件是一种用于复用组件逻辑的高级技术,它并不是 React API的一部分,而是从React 演化而来的一种模式. 具体地说 ...

  7. JVM内存模型你只要看这一篇就够了

    JVM内存模型你只要看这一篇就够了 我是一只孤傲的鱼鹰 让我们不厌其烦的从内存模型开始说起:作为一般人需要了解到的,JVM的内存区域可以被分为:线程栈,堆,静态方法区(实际上还有更多功能的区域,并且这 ...

  8. [转帖]看完这篇文章你还敢说你懂JVM吗?

    看完这篇文章你还敢说你懂JVM吗? 在一些物理内存为8g的服务器上,主要运行一个Java服务,系统内存分配如下:Java服务的JVM堆大小设置为6g,一个监控进程占用大约 600m,Linux自身使用 ...

  9. 【java编程】ServiceLoader使用看这一篇就够了

    转载:https://www.jianshu.com/p/7601ba434ff4 想必大家多多少少听过spi,具体的解释我就不多说了.但是它具体是怎么实现的呢?它的原理是什么呢?下面我就围绕这两个问 ...

  10. BZOJ 1061: [Noi2008]志愿者招募 [单纯形法]【学习笔记看另一篇吧】

    1061: [Noi2008]志愿者招募 Time Limit: 20 Sec  Memory Limit: 162 MBSubmit: 3975  Solved: 2421[Submit][Stat ...

随机推荐

  1. angular指令的详细讲解,不断补充

    独立作用域:就是在指令中设置了scope: **** ·false 共享父作用域 ·true 继承父作用域,并且新建独立作用域 ·object 不继承父作用域,创建新的独立作用域 一般来说我们会使用第 ...

  2. nginx 自签名证书 配置 https

    最近在研究nginx,整好遇到一个需求就是希望服务器与客户端之间传输内容是加密的,防止中间监听泄露信息,但是去证书服务商那边申请证书又不合算,因为访问服务器的都是内部人士,所以自己给自己颁发证书,忽略 ...

  3. 02 - Unit08:搜索笔记功能、搜索分页、处理插入数据库乱码问题

    搜索笔记功能 按键监听事件 $("#search_note").keydown(function(event){ var code=event.keyCode; if(code== ...

  4. Python中表达式和语句及for、while循环练习

    Python中表达式和语句及for.while循环练习 1)表达式 常用的表达式操作符: x + y, x - y x * y, x / y, x // y, x % y 逻辑运算: x or y, ...

  5. node使用JsonWebToken 生成token,完成用户登录、登录检测

    最近在用node做后台的登录,检测登录功能.在本地使用session可以成功,但是放服务器后发现session失效了,每次请求session都会变化,着了很久原因.原来,自己项目是前后端分离的,前端调 ...

  6. 【转】Java 字节流与字符流的区别

    字节流与和字符流的使用非常相似,两者除了操作代码上的不同之外,是否还有其他的不同呢?实际上字节流在操作时本身不会用到缓冲区(内存),是文件本身直接操作的,而字符流在操作时使用了缓冲区,通过缓冲区再操作 ...

  7. 【ZZ】C++静态库与动态库 | 菜鸟教程

    C++静态库与动态库 http://www.runoob.com/w3cnote/cpp-static-library-and-dynamic-library.html

  8. python编程遇见的异常

    import sys print('目前系统的编码为:',sys.getdefaultencoding()) # 目前系统的编码为: utf-8 name = 'this is a test!' pr ...

  9. Linux Storage Stack Diagram存储堆栈图

    这是一个描述非常好的存储栈,版本为:Linux Storage Stack Diagram v4.10,我在这里转载下图片,可以提升大家对存储栈的理解. https://www.thomas-kren ...

  10. win10 svn commit无响应

    只是发现其中的一个原因,发现.cs代码文件图标变红了,默认是用Code Writer打开,和SVN可能是冲突了,解决方式是用Code Writer打开一下.cs文件就可以了,原因可能是不打开一次Cod ...