前言:关于地理位置及定位系统,在iOS开发中也比较常见,比如美团外面的餐饮店铺的搜索,它首先需要用户当前手机的位置,然后在这个位置附近搜索相关的餐饮店铺的位置,并提供相关的餐饮信息,再比如最常见的就是地图导航,地图导航更需要定位服务,然后根据用户的目的地选出一条路线。其实,作为手机用户这么长时间,或多或少会发现在有些app应用首次在你的手机安装成功后,首次启动可能就会提示"是否同意XXx(比如百度浏览器)获取当前位置"等这样一类的信息。可见地理位置及定位系统是企业app开发必不可少的技能。

本章将提供Swift版本和Objective-C两个版本的入门代码,分别实现显示当前手机或者是模拟器的地理经纬度坐标。

写在正式学习前的小贴士:

这是因为xcode升级造成的定位权限设置问题。
升级xcode6、xcode7以后打开以前xcode5工程,程序不能定位。工程升级到xcode6或xcode7编译时需要iOS8 要自己写授权,不然没权限定位。
解决方法:
首先在 info.plist里加入对应的缺少的字段 ,值设置为YES(前台定位写上边字段,前后台定位写下边字段)
          NSLocationWhenInUseUsageDescription   //允许在前台获取GPS的描述
          NSLocationAlwaysUsageDescription   //允许在前、后台获取GPS的描述

设置的图示:

好了,如果设置好了,那就正式进入编码学习吧,首先熟悉苹果提供的关于定位服务相关的类,方法以及属性:

1、定位服务和地图应用的介绍 定位服务: 获取用户当前的位置信息,针对用户的位置信息做相关的数据处理。

地图应用: 根据实际需求展示地图和周边环境信息,基于用户当前位置展示用户所关注的地图位置信息、以及为用户导航。

  • 定位服务要掌握的:

    • 主要操作的类:CLLocationManager
    • 所属库:CoreLocation
    • 结构体:CLLocationCoordinate2D(经纬度)、CLCLocationCoorRegion(区域)
  • 地图应用需要掌握的:
    • 框架:MapKit
    • 操作类:MKMapView

2、定位服务

  • 属性:

    • desiredAccuracy设置定位精确度,这是一个常量属性,一般用best
    • distanceFilter 重新定位的最小变化距离
  • 方法:

    • 设置什么时候开启定位的状态

      • requestAlwaysAuthorization() 始终开启定位
      • requestWhenInUseAuthorization() 当app进入前台的时候开启定位(iOS8的新方法)
      • 类方法locationServicesEnabled() 是否有定位服务功能(CLLocationManager)
      • startUpdatingLocation() 开启定位
  • 代理:

    • 代理的协议:
    • 代理的方法:可以直接进入这个库的API查看,只要就是定位错误调用的代理方法,定位成功调用的代理方法等等;
  • 涉及到的对象

    • locations: CLLocation 该CLLocation对象的属性:

      • coordinate

        • longitude/latitude
  • 英语词汇积累:

    • accuracy 英 'ækjʊrəsɪ n. [数] 精确度,准确性
    • filter 英 'fɪltə 滤波器 过滤器;筛选;滤光器 过滤;渗透;用过滤法除去

下面提供的是Swift源码:

 1 //
 2 //  ViewController.swift
 3 //  LocationManager
 4 //
 5 //  Created by HEYANG on 16/1/26.
 6 //  Copyright © 2016年 HEYANG. All rights reserved.
 7 //
 8
 9 import UIKit
10
11 // 需要导入CoreLocation框架
12 import CoreLocation
13
14 class ViewController: UIViewController,CLLocationManagerDelegate {
15
16     // 声明一个全局变量
17     var locationManager:CLLocationManager!
18
19     override func viewDidLoad() {
20         super.viewDidLoad()
21         locationManager = CLLocationManager()
22
23         // 设置定位的精确度
24         locationManager.desiredAccuracy = kCLLocationAccuracyBest
25
26         // 设置定位变化的最小距离 距离过滤器
27         locationManager.distanceFilter = 50
28
29         // 设置请求定位的状态
30         if #available(iOS 8.0, *) {
31             locationManager.requestWhenInUseAuthorization()
32         } else {
33             // Fallback on earlier versions
34             print("hello")
35         }//这个是在ios8之后才有的
36
37         // 设置代理为当前对象
38         locationManager.delegate = self;
39
40         if CLLocationManager.locationServicesEnabled(){
41             // 开启定位服务
42             locationManager.startUpdatingLocation()
43         }else{
44             print("没有定位服务")
45         }
46
47     }
48     // 定位失败调用的代理方法
49     func locationManager(manager: CLLocationManager, didFailWithError error: NSError) {
50         print(error)
51     }
52     // 定位更新地理信息调用的代理方法
53     func locationManager(manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
54         if locations.count > 0
55         {
56             let locationInfo = locations.last!
57             let alert:UIAlertView = UIAlertView(title: "获取的地理坐标",
58                 message: "经度是:\(locationInfo.coordinate.longitude),维度是:\(locationInfo.coordinate.latitude)",
59                 delegate: nil, cancelButtonTitle: "是的")
60             alert.show()
61         }
62     }
63 }

下面是Objective-C的源码:

 1 //
 2 //  ViewController.m
 3 //  LocationManager
 4 //
 5 //  Created by HEYANG on 16/1/26.
 6 //  Copyright © 2016年 HEYANG. All rights reserved.
 7 //
 8
 9 #import "ViewController.h"
10
11 #import <CoreLocation/CoreLocation.h>
12
13
14 @interface ViewController () <CLLocationManagerDelegate>
15
16 /** 全局定位对象 */
17 @property (nonatomic,strong)CLLocationManager *locationManager;
18
19 @end
20
21 @implementation ViewController
22
23 - (void)viewDidLoad {
24     [super viewDidLoad];
25
26     CLLocationManager* locationManager = [[CLLocationManager alloc] init];
27
28     // 设置定位精确度
29     locationManager.desiredAccuracy = kCLLocationAccuracyBest;
30     // 设置定位变化最小距离
31     locationManager.distanceFilter = 50;
32
33     // 设置定位服务的使用状态
34         [locationManager requestWhenInUseAuthorization];
35     locationManager.delegate = self;
36
37     if ([CLLocationManager locationServicesEnabled]) {
38         [locationManager startUpdatingLocation];
39     }else{
40         NSLog(@"本机不支持定位服务功能");
41     }
42
43     self.locationManager = locationManager;
44 }
45 // 定位失败调用的代理方法
46 -(void)locationManager:(CLLocationManager *)manager didFailWithError:(NSError *)error{
47     NSLog(@"错误信息:%@",error);
48 }
49 // 定位数据更新调用的代理方法
50 -(void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray<CLLocation *> *)locations{
51     if (locations.count > 0) {
52         CLLocation* location = locations.lastObject;
53         CLLocationCoordinate2D coordinate2D = location.coordinate;
54         NSString* message = [NSString stringWithFormat:@"经度:%lf,维度是:%lf",coordinate2D.longitude,coordinate2D.latitude];
55         UIAlertView* alertView = [[UIAlertView alloc] initWithTitle:@"显示当前位置的经纬度"                 message:message delegate:nil cancelButtonTitle:@"取消" otherButtonTitles:@"确定", nil];
56         [alertView show];
57
58     }
59 }
60
61 @end

转载请注明出处:http://www.cnblogs.com/goodboy-heyang/p/5161989.html

iOS之地理位置及定位系统 -- 入门笔记(用Swift)相关推荐

  1. ios逆向入门笔记-HOOK-QQ登录

    ios逆向入门笔记-HOOK-QQ登录 选择目标 砸壳 基本调试 Reveal+确定目标action及target 利用Logos 进行 hook 后续 选择目标 在经过之前的配置,这次有点小改动= ...

  2. java程序开发个人笔记_Java程序开发入门笔记

    Java程序开发入门笔记 如果你是这一个错误的话:错误:编码GBK的不可映射字符 这是因为我们编写的代码一般都是utf-8的格式而控制台用的不是utf-8格式所以就会出现中文输出的错误.这个时候我们可 ...

  3. pytorch深度学习入门笔记

    Pytorch 深度学习入门笔记 作者:梅如你 学习来源: 公众号: 阿力阿哩哩.土堆碎念 B站视频:https://www.bilibili.com/video/BV1hE411t7RN? 中国大学 ...

  4. Python数据分析入门笔记6——数据清理案例练习

    系列文章目录 Python数据分析入门笔记1--学习前的准备 Python数据分析入门笔记2--pandas数据读取 Python数据分析入门笔记3--数据预处理之缺失值 Python数据分析入门笔记 ...

  5. iOS即时通讯,从入门到“放弃”?

    image 前言 本文会用实例的方式,将iOS各种IM的方案都简单的实现一遍.并且提供一些选型.实现细节以及优化的建议. 注:文中的所有的代码示例,在github中都有demo: iOS即时通讯,从入 ...

  6. nRF51822-新手入门笔记

    [群150178878]nRF51822-新手入门笔记[1] 转自: http://www.eeboard.com/bbs/thread-40359-1-1.html 这是1年前入门时记的笔记,有些问 ...

  7. React入门笔记(一)

    React入门笔记 1.引言 2.什么是React? 3.React基本的使用 4.JSX--react的语法糖 5.理解虚拟Dom 6.手配React项目 7.参考文章 8.视频教程地址 1.引言 ...

  8. HTML5课堂入门笔记(完)

    HTML5入门笔记 一.网页设计中 的软件的安装设置 1.typroa-笔记本工具(方便记录说明文档,图片等内容) 减号加空格可出现此点 文件名:由 基本文件名.扩展名(扩展名来确定这个文件的打开方式 ...

  9. 苹果ios开发一年的工作笔记

    苹果ios开发一年的工作笔记 退回输入键盘 - (BOOL) textFieldShouldReturn:(id)textField{ [textField resignFirstResponder] ...

最新文章

  1. 网站开发流程以及HTML5简介(三)
  2. Android -- EventBus使用
  3. 谈谈你对摩尔定律的理解,摩尔定律当前还是继续有效的吗?
  4. 【PC工具】智能抠图软件,绿色免安装抠图神奇抠图工具
  5. 高德深度信息接入的平台化演进
  6. 使用poi调整字体格式、添加单元格注释、自动调整列宽
  7. 【j2ee spring】30、巴巴荆楚网-综合hibernate4+spring4(5)分页
  8. 根据服务端生成的WSDL文件创建客户端支持代码的三种方式
  9. python调用按键精灵插件_按键精灵教程打码平台接入
  10. Java SE 和 Java EE 的区别
  11. DHCP报文抓包分析
  12. Golang Go语言 安装包 下载 官方包 与 Golang 中文网
  13. Python大屏看板最全教程之数据库连接
  14. Oracle Parallel使用方法
  15. 微信小程序初始化NPM
  16. 又拍云 php sdk,GitHub - totoleo/php-sdk: UPYUN PHP SDK
  17. 注册表的使用-入门篇
  18. Android 2.2 (Froyo) 源码已经公布
  19. 新荣记、大董、巴奴逆势扩张,高端餐饮的进击与野望
  20. php steam 第三方登录,Steam第三方授权登录异常 《绝地求生》国服绑定中招

热门文章

  1. python学习实例(7)
  2. Linux下MySQL忘记root密码及解决办法
  3. js正则限制字符串长度_正则笔记(3)万字长文,慎点。
  4. 解决浏览器 Provisional headers are shown 无法向后台发送请求问题
  5. Web Service 简单实例(java 版本) ,IDE自动生成客户端代码方法
  6. python基本语法:元组
  7. JDK下载地址、SecureCRT中JDK安装和环境配置、SecureCRT窗口编程、linux下命令运行小程序
  8. python内建函数和工厂函数的整理
  9. Django加载静态文件
  10. CSS中position属性(abusolute | relative | static | fixed)区别