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配置也不一样,分别是NSLocationAlwaysUsageDescription和NSLocationWhenInUseUsageDescription。至于在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. The type org.springframework.context.support.AbstractApplicationContext cannot be resolved

    在 myeclipse中,使用 jdk6和7,并使用 spring-framework-5.0.2.RELEASE 时,编写代码: import org.springframework.context ...

  2. pytest框架 里 fixture 参数化的方法

  3. 利用spring的ApplicationListener实现springmvc容器的初始化加载

    1.我们在使用springmvc进行配置的时候一般初始化都是在web.xml里面进行的,但是自己在使用的时候经常会测试一些数据,这样就只有加载spring-mvc.xml的配置文件来实现.为了更方便的 ...

  4. storm架构及原理

    storm 架构与原理 1 storm简介 1.1 storm是什么 如果只用一句话来描述 storm 是什么的话:分布式 && 实时 计算系统.按照作者 Nathan Marz 的说 ...

  5. 同一客户端使用多份SSH Key

    创建或添加如下内容: Host example1.com HostName realname.example.com IdentityFile ~/.ssh/example1_rsa # 私钥 Hos ...

  6. spinnaker

    https://www.spinnaker.io/guides/tutorials/codelabs/kubernetes-source-to-prod/#configuring-kubernetes

  7. interrupt和isInterrupted的基本使用方法

    java线程是协作式,而非抢占式 调用一个线程的interrupt() 方法中断一个线程,并不是强行关闭这个线程,只是跟这个线程打个招呼,将线程的中断标志位置为true,线程是否中断,由线程本身决定. ...

  8. set 续1

    --------siwuxie095             三.用 set 实现计算     语法: SET /A expression     /A 命令行开关指定等号右边的字符串为待计算的数字表 ...

  9. 阿里云自定义监控tomcat进程数

    阿里云提供自定义监控SDK,这有助于我们定制化的根据自身业务来做监控,下面我就根据业务需求来介绍一个简单的自定义监控配置. 阿里提供了2个版本的自定义监控接口:自定义监控SDK(python版) :c ...

  10. java代码实现网络远程开机

    http://my.oschina.net/kingfire/blog/156764 概述 远程开机(Wake onLAN)是指通过网络实现对服务器或者pc启动运行,现在很多网卡都支持的这个功能. 其 ...