IOS开发之Core Location
IOS 支持三种检测当前位置的方式:手机基站、Wi-Fi、和GPS,其中GPS是经度最高的,同时也是最耗费手机电量的。一般情况下在室内是无法通过GPS获 取位置信息的,通过Wi-Fi获取位置的原理是通过网络提供商的IP地址信息来获取位置,经度不是很高,最后是通过手机基站获取位置,手机开机后会连接附 近的基站塔获取信号,通过基站可以得到手机所在的位置信息,基站越密集,所获取的位置信息经度就越高。
IOS SDK提供的Core Location能比较好的提供获取位置信息的功能,获取位置信息涉及如下几个类,CLLocationManager(位置管理器), CLLocation, CLLocationManagerdelegate(协议、提供委托方法),CLLocationCoodinate2D(存储坐标位置)
另外CLLocationManager还有几个属性;
desiredAccuracy:位置的精度属性
取值有如下几种:
|
kCLLocationAccuracyBest |
精确度最佳 |
|
kCLLocationAccuracynearestTenMeters |
精确度10m以内 |
|
kCLLocationAccuracyHundredMeters |
精确度100m以内 |
|
kCLLocationAccuracyKilometer |
精确度1000m以内 |
|
kCLLocationAccuracyThreeKilometers |
精确度3000m以内 |
distanceFilter:横向移动多少距离后更新位置信息
delegate:响应CLLocationManagerdelegate的对象
下面来构建一个获取位置的例子:
首先建立一个Single View Application工程,然后引入CoreLocation.framework,并在ViewController.h中修改如下:
#import <UIKit/UIKit.h> #import <CoreLocation/CoreLocation.h>
@interface ViewController : UIViewController<CLLocationManagerDelegate> { CLLocationManager *locManager; }
@property (retain, nonatomic) IBOutletUILabel *lonLabel; @property (retain, nonatomic) IBOutletUILabel *latLabel; @property (retain, nonatomic) CLLocationManager *locManager;
@end
#import "ViewController.h"
@interfaceViewController ()
@end
@implementation ViewController @synthesize lonLabel; @synthesize latLabel; @synthesize locManager;
- (void)viewDidLoad { [superviewDidLoad]; //初始化位置管理器 locManager = [[CLLocationManager alloc]init]; //设置代理 locManager.delegate = self; //设置位置经度 locManager.desiredAccuracy = kCLLocationAccuracyBest; //设置每隔100米更新位置 locManager.distanceFilter = 100; //开始定位服务 [locManagerstartUpdatingLocation]; }
- (void)viewDidUnload { [selfsetLonLabel:nil]; [selfsetLatLabel:nil]; [superviewDidUnload]; // Release any retained subviews of the main view. }
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation { return (interfaceOrientation != UIInterfaceOrientationPortraitUpsideDown); }
- (void)dealloc { //停止定位服务 [locManagerstopUpdatingLocation]; [lonLabelrelease]; [latLabelrelease]; [superdealloc]; }
//协议中的方法,作用是每当位置发生更新时会调用的委托方法 -(void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation { //结构体,存储位置坐标 CLLocationCoordinate2D loc = [newLocation coordinate]; float longitude = loc.longitude; float latitude = loc.latitude; self.lonLabel.text = [NSStringstringWithFormat:@"%f",longitude]; self.latLabel.text = [NSStringstringWithFormat:@"%f",latitude]; }
//当位置获取或更新失败会调用的方法 -(void)locationManager:(CLLocationManager *)manager didFailWithError:(NSError *)error { NSString *errorMsg = nil; if ([error code] == kCLErrorDenied) { errorMsg = @"访问被拒绝"; } if ([error code] == kCLErrorLocationUnknown) { errorMsg = @"获取位置信息失败"; } UIAlertView *alertView = [[UIAlertViewalloc]initWithTitle:@"Location" message:errorMsg delegate:self cancelButtonTitle:@"Ok"otherButtonTitles:nil, nil]; [alertView show]; [alertView release]; }
@end

IOS开发之Core Location的更多相关文章
- iOS开发之Core Animation
在IOS中如果使用普通的动画则可以使用UIKit提供的动画方式来实现,如果想实现更复杂的效果,则需要使用Core Animation了. 在Core Animation中我们经常使用的是 CABasi ...
- 李洪强iOS开发之RunLoop的原理和核心机制
李洪强iOS开发之RunLoop的原理和核心机制 搞iOS之后一直没有深入研究过RunLoop,非常的惭愧.刚好前一阵子负责性能优化项目,需要利用RunLoop做性能优化和性能检测,趁着这个机会深入研 ...
- iOS开发之Socket通信实战--Request请求数据包编码模块
实际上在iOS很多应用开发中,大部分用的网络通信都是http/https协议,除非有特殊的需求会用到Socket网络协议进行网络数 据传输,这时候在iOS客户端就需要很好的第三方CocoaAsyncS ...
- iOS开发之UISearchBar初探
iOS开发之UISearchBar初探 UISearchBar也是iOS开发常用控件之一,点进去看看里面的属性barStyle.text.placeholder等等.但是这些属性显然不足矣满足我们的开 ...
- iOS开发之UIImage等比缩放
iOS开发之UIImage等比缩放 评论功能真不错 评论开通后,果然有很多人吐槽.谢谢大家的支持和关爱,如果有做的不到的地方,还请海涵.毕竟我一个人的力量是有限的,我会尽自己最大的努力大家准备一些干货 ...
- iOS开发之 Xcode6 添加xib文件,去掉storyboard的hello world应用
iOS开发之 Xcode6.1创建仅xib文件,无storyboard的hello world应用 由于Xcode6之后,默认创建storyboard而非xib文件,而作为初学,了解xib的加载原理 ...
- iOS开发之loadView、viewDidLoad及viewDidUnload的关系
iOS开发之loadView.viewDidLoad及viewDidUnload的关系 iOS开发之loadView.viewDidLoad及viewDidUnload的关系 标题中所说的3个方 ...
- iOS开发之info.pist文件和.pch文件
iOS开发之info.pist文件和.pch文件 如果你是iOS开发初学者,不用过多的关注项目中各个文件的作用.因为iOS开发的学习路线起点不在这里,这些文件只会给你学习带来困扰. 打开一个项目,我们 ...
- iOS开发之WKWebView简单使用
iOS开发之WKWebView简单使用 iOS开发之 WKWebVeiw使用 想用UIWebVeiw做的,但是突然想起来在iOS8中出了一个新的WKWebView,算是UIWebVeiw的升级版. ...
随机推荐
- SpringBoot+Mybatis多模块(module)项目搭建教程
一.前言 最近公司项目准备开始重构,框架选定为SpringBoot+Mybatis,本篇主要记录了在IDEA中搭建SpringBoot多模块项目的过程. 1.开发工具及系统环境 IDE:Intelli ...
- 理解 static (深入了解JAVA虚拟机)
谈谈我对static的理解 因为我发现很多同学学到这里都会很困惑 很难理解static到底是个什么 首先 static是个修饰符 被static修饰的变量我们统称为静态变量也叫类变量(为什么叫类变量呢 ...
- Java中的访问权限控制
Java提供了public, private, protected 三个访问权限修饰词,提供了以下四种访问权限控制机制: 1.包访问权限: 2.Public访问权限: 3.Private访问权限: 4 ...
- [HihoCoder1393]网络流三·二分图多重匹配
题目大意: 班级有$N$名学生,运动会有$M$项不同的比赛,第$i$项比赛每个班需要派出$m_i$名选手参加,编号为i的学生最多同时参加给定的$b_i$项比赛中的任意$a_i$项比赛.根据统计的结果, ...
- C++使用thread类多线程编程
转自:C++使用thread类多线程编程 C++11中引入了一个用于多线程操作的thread类,下面进行简单演示如何使用,以及如果进行多线程同步. thread简单示例 #include <io ...
- Java中的ReentrantLock和synchronized两种锁定
原文:http://www.ibm.com/developerworks/cn/java/j-jtp10264/index.html 多线程和并发性并不是什么新内容,但是 Java 语言设计中的创新之 ...
- VC在线程中操作界面
http://blog.csdn.net/tingsking18/article/details/4399199 多线程是我们在编程中经常遇到的问题,线程执行完后往往要把执行的结果传给主线程,但是MF ...
- Hook Directx + CEGUI VC++
void CtestwmDlg::OnBnClickedButton1() { CStringA lpszFile; m_file.GetWindowText(lpszFile); if (lpszF ...
- android addJavascriptInterface 不能生效 解决办法
2015-03-10 16:47:31| 分类: 软件技术|举报|字号 订阅 下载LOFTER客户端 1. webview.addJavascriptInterface() doen ...
- Android批量图片加载经典系列——afinal框架实现图片的异步缓存加载
一.问题描述 在之前的系列文章中,我们使用了Volley和Xutil框架实现图片的缓存加载(查看系列文章:http://www.cnblogs.com/jerehedu/p/4607599.html# ...