iOS之地理位置及定位系统 -- 入门笔记(用Swift)
2016-03-11 00:00
513 查看
前言:关于地理位置及定位系统,在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源码:
下面是Objective-C的源码:
转载请注明出处:http://www.cnblogs.com/goodboy-heyang/p/5161989.html
本章将提供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
相关文章推荐
- Swift字符与字符串
- Swift面向对象基础(上)——Swift中的类和结构体(下)
- Swift 中的函数(中)
- 小波说雨燕 第三季 构建 swift UI 之 UI组件集-视图集(一)视图共性 学习笔记
- Swift中的类和结构体的相同点与不同点
- Swift随记
- 小波说雨燕 第三季 构建 swift UI 之 UI组件集-视图集(六)Picker View视图 学习笔记
- 自学 iOS – 三十天三十个 Swift 项目
- 小波说雨燕 第三季 构建 swift UI 之 UI组件集-视图集(九) ToolbarView工具条 学习笔记
- IOS之Foundation之探究学习Swift实用基础整理<一>
- Swift中的字典
- 小波说雨燕 第三季 构建 swift UI 之 UI组件集-视图集(二)ActionSheet视图 学习笔记
- Swift 中的函数(下)
- 小波说雨燕 第三季 构建 swift UI 之 UI组件集-视图集(八) SearchBar搜索条 学习笔记
- 小波说雨燕 第三季 构建 swift UI 之 UI组件集-视图集(七)Progress View进度条 学习笔记
- Swift面向对象基础(中)——Swift中的存储属性和计算属性
- 小波说雨燕 第三季 构建 swift UI 之 度假清单 学习笔记
- 小波说雨燕 第三季 构建 swift UI 之 UI组件集-视图集(三)Activity Indicators视图 学习笔记
- 小波说雨燕 第三季 构建 swift UI 之 UI组件集-视图集(五)Image View视图 学习笔记
- Swift 中的函数(上)