- 浏览: 641588 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
lizaochengwen:
网络请求碰到的中文乱码使用encodeURL吧- (NSStr ...
iPhone开发/iPad开发 中文乱码问题 -
hhb19900618:
还是没弄懂怎么解决了中文乱码? 正确代码能重写贴出吗
iPhone开发/iPad开发 中文乱码问题 -
zhengjj_2009:
我的理解是讲ipa文件解压缩之后再重新打包,已经破坏了签名,所 ...
xcodebuild和xcrun实现自动打包iOS应用程序 -
zhengjj_2009:
我参考你的“ 从ipa格式的母包生成其它渠道包的shell脚本 ...
xcodebuild和xcrun实现自动打包iOS应用程序 -
同一片天空:
问题果然解决了
iOS 搭建 XMPP实现环境
LBS是移动应用的一个大热点。很多App都允许(或者说要求)获取用户的地理位置。这篇文章将简要谈谈如何利用CoreLocation来获取地理位置,并且会涉及到如何在iPhone的模拟器进行调试。
要利用CoreLocation,必须在frameworks里面加入“CoreLocation.framework”。在最新版本的Xcode(4.x)中加入新的framework步骤如下:
单击项目的target =>在出来的xcodeproj面板中点击“Link Binary With Libraries” =>点击“+”,然后选择需要的framework即可。
加入“CoreLocation.framework”之后,就可以在类中import <CoreLocation/CoreLocation.h>,这样就可以使用所有与CoreLocation相关的类了。
下面开始在项目里面实现获取当前地理位置:
第一步:
先在类中定义两个成员变量:
view plain
CLLocationManager *locationManager;
CLLocation *checkinLocation;
这两个变量,locationManaager用于获取位置,checkinLocation用于保存获取到的位置信息。
第二步:
在类中实现CLLocationManagerDelegate,并实现以下方法:
view plain
- (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation
fromLocation:(CLLocation *)oldLocation {
checkinLocation = newLocation;
//do something else
}
从代码可以看到,运行到这个方法的时候,locationManager已经得到了当前的位置,所以在这个方法中应该把获取到的当前位置保存到变量checkinLocation中。
第三步:
在第二步实现的方法其实是被CLLocationManager中的方法startUpdatingLocation调用的,也就是说,当程序运行 locationManager.startUpdatingLocation的时候,第二步实现的方法就会被调用。
假设点击按钮checkIn的时候,程序会获取当前位置,那么就需要在这个checkIn按钮对应的动作方法(假设是方法名就叫做checkIn)中调用locationManager.startUpdatingLocation。具体如下:
view plain
- (void) setupLocationManager {
self.locationManager = [[[CLLocationManager alloc] init] autorelease];
if ([CLLocationManager locationServicesEnabled]) {
NSLog( @"Starting CLLocationManager" );
self.locationManager.delegate = self;
self.locationManager.distanceFilter = 200;
locationManager.desiredAccuracy = kCLLocationAccuracyBest;
[self.locationManager startUpdatingLocation];
} else {
NSLog( @"Cannot Starting CLLocationManager" );
/*self.locationManager.delegate = self;
self.locationManager.distanceFilter = 200;
locationManager.desiredAccuracy = kCLLocationAccuracyBest;
[self.locationManager startUpdatingLocation];*/
}
}
在上面的代码中,程序首先判断机器(iPhone/iPad)是不是开启了地理位置的服务(locationServicesEnabled)。如果开启了,那么就开始进行定位([self.locationManager startUpdatingLocation];)。在定位之前要设置一些有关位置的属性,比如distanceFilter,desiredAccuacy等等。至于这些属性有什么用,可以查看xcode的文档,这里就不在赘述。值得注意的是,一定要设置locationManager的delegate是类本身,这样startUpdatingLocation运行的时候才会调用第二步实现的方法。
如果机器没有开启地理位置的服务,那么就不需要做多余的动作。注意到上面代码中有一部分代码被注释掉了,这部分代码这是为了能够在模拟器中调试程序。
下面谈谈如何在模拟器中调试获取当前地理位置的程序。
如果程序在真机中调试,只要真机开启了定位功能(GPS或者无线定位),那么就可以调试成功的。但是如果在模拟器中调试,就要做点额外功夫。由于在模拟器中是无法开启地理位置的服务(locationServicesEnabled总是等于false),所以需要将当前位置(或者任意位置)hardcode进程序当中,以便调试。
将下面的代码添加进类中(实现了获取当前位置的代码所在的类文件),添加的位置在import代码段的后面:
view plain
@implementation CLLocationManager (TemporaryHack)
- (void)hackLocationFix
{
//CLLocation *location = [[CLLocation alloc] initWithLatitude:42 longitude:-50];
float latitude = 26.876812;
float longitude = 100.22569199999998; //这里可以是任意的经纬度值
CLLocation *location= [[[CLLocation alloc] initWithLatitude:latitude longitude:longitude] autorelease];
[[self delegate] locationManager:self didUpdateToLocation:location fromLocation:nil];
}
- (void)startUpdatingLocation
{
[self performSelector:@selector(hackLocationFix) withObject:nil afterDelay:0.1];
}
@end
添加完这段代码之后,同时将第三步实现的方法中被注释掉的代码恢复,也就是即使locationServicesEnabled等于false也调用startUpdatingLocation方法,这样程序就可以在模拟器中正常运行了。但是注意的是,这时候获取的当前位置就是是上面代码中你自己所设定的经纬度值。
整个过程都十分简单,因为大部分工作都被封装起来了。
获得当前位置之后,就可以在地图上显示,下篇文章将会谈谈如何用地图显示地理信息,包括自定义Annotation。
要利用CoreLocation,必须在frameworks里面加入“CoreLocation.framework”。在最新版本的Xcode(4.x)中加入新的framework步骤如下:
单击项目的target =>在出来的xcodeproj面板中点击“Link Binary With Libraries” =>点击“+”,然后选择需要的framework即可。
加入“CoreLocation.framework”之后,就可以在类中import <CoreLocation/CoreLocation.h>,这样就可以使用所有与CoreLocation相关的类了。
下面开始在项目里面实现获取当前地理位置:
第一步:
先在类中定义两个成员变量:
view plain
CLLocationManager *locationManager;
CLLocation *checkinLocation;
这两个变量,locationManaager用于获取位置,checkinLocation用于保存获取到的位置信息。
第二步:
在类中实现CLLocationManagerDelegate,并实现以下方法:
view plain
- (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation
fromLocation:(CLLocation *)oldLocation {
checkinLocation = newLocation;
//do something else
}
从代码可以看到,运行到这个方法的时候,locationManager已经得到了当前的位置,所以在这个方法中应该把获取到的当前位置保存到变量checkinLocation中。
第三步:
在第二步实现的方法其实是被CLLocationManager中的方法startUpdatingLocation调用的,也就是说,当程序运行 locationManager.startUpdatingLocation的时候,第二步实现的方法就会被调用。
假设点击按钮checkIn的时候,程序会获取当前位置,那么就需要在这个checkIn按钮对应的动作方法(假设是方法名就叫做checkIn)中调用locationManager.startUpdatingLocation。具体如下:
view plain
- (void) setupLocationManager {
self.locationManager = [[[CLLocationManager alloc] init] autorelease];
if ([CLLocationManager locationServicesEnabled]) {
NSLog( @"Starting CLLocationManager" );
self.locationManager.delegate = self;
self.locationManager.distanceFilter = 200;
locationManager.desiredAccuracy = kCLLocationAccuracyBest;
[self.locationManager startUpdatingLocation];
} else {
NSLog( @"Cannot Starting CLLocationManager" );
/*self.locationManager.delegate = self;
self.locationManager.distanceFilter = 200;
locationManager.desiredAccuracy = kCLLocationAccuracyBest;
[self.locationManager startUpdatingLocation];*/
}
}
在上面的代码中,程序首先判断机器(iPhone/iPad)是不是开启了地理位置的服务(locationServicesEnabled)。如果开启了,那么就开始进行定位([self.locationManager startUpdatingLocation];)。在定位之前要设置一些有关位置的属性,比如distanceFilter,desiredAccuacy等等。至于这些属性有什么用,可以查看xcode的文档,这里就不在赘述。值得注意的是,一定要设置locationManager的delegate是类本身,这样startUpdatingLocation运行的时候才会调用第二步实现的方法。
如果机器没有开启地理位置的服务,那么就不需要做多余的动作。注意到上面代码中有一部分代码被注释掉了,这部分代码这是为了能够在模拟器中调试程序。
下面谈谈如何在模拟器中调试获取当前地理位置的程序。
如果程序在真机中调试,只要真机开启了定位功能(GPS或者无线定位),那么就可以调试成功的。但是如果在模拟器中调试,就要做点额外功夫。由于在模拟器中是无法开启地理位置的服务(locationServicesEnabled总是等于false),所以需要将当前位置(或者任意位置)hardcode进程序当中,以便调试。
将下面的代码添加进类中(实现了获取当前位置的代码所在的类文件),添加的位置在import代码段的后面:
view plain
@implementation CLLocationManager (TemporaryHack)
- (void)hackLocationFix
{
//CLLocation *location = [[CLLocation alloc] initWithLatitude:42 longitude:-50];
float latitude = 26.876812;
float longitude = 100.22569199999998; //这里可以是任意的经纬度值
CLLocation *location= [[[CLLocation alloc] initWithLatitude:latitude longitude:longitude] autorelease];
[[self delegate] locationManager:self didUpdateToLocation:location fromLocation:nil];
}
- (void)startUpdatingLocation
{
[self performSelector:@selector(hackLocationFix) withObject:nil afterDelay:0.1];
}
@end
添加完这段代码之后,同时将第三步实现的方法中被注释掉的代码恢复,也就是即使locationServicesEnabled等于false也调用startUpdatingLocation方法,这样程序就可以在模拟器中正常运行了。但是注意的是,这时候获取的当前位置就是是上面代码中你自己所设定的经纬度值。
整个过程都十分简单,因为大部分工作都被封装起来了。
获得当前位置之后,就可以在地图上显示,下篇文章将会谈谈如何用地图显示地理信息,包括自定义Annotation。
发表评论
-
SOCK_STREAM和SOCK_DGRAM
2015-07-23 20:08 1558sock_stream 是有保障的(即能保证数据正确传送到 ... -
SOCKET bind INADDR_LOOPBACK和INADDR_ANY的区别
2015-07-23 19:49 1997今天写程序时候,服务器端启动了,然后客户端总是连接不上,con ... -
htons()
2015-07-23 19:26 524在C/C++写网络程序的时候,往往会遇到字节的网络顺序和主机顺 ... -
使用symbolicatecrash分析crash文件
2015-03-10 11:32 1110原文 http://www.cnblogs.com/ning ... -
程序设计中的计算复用(Computational Reuse)
2015-02-10 10:18 601从斐波那契数列说起 ... -
didReceiveMemoryWarning
2015-02-09 16:11 482IPhone下每个app可用的内存是被限制的,如果一个app使 ... -
iOS开发中怎么响应内存警告
2015-02-09 16:08 600好的应用应该在系统内存警告情况下释放一些可以重新创建的资源。在 ... -
ASIHTTPRequest多次重复请求的问题
2014-12-17 14:34 583在一个车票订购的项目中,点击一次订购,却生成了2次订单,通过抓 ... -
从 CloudKit 看 BaaS 服务的趋势
2014-09-26 11:51 682从 6 月份 WWDC 苹果发布 ... -
ios编程--AVCapture编程理解
2014-09-26 11:03 8610、媒体采集的几个东西。这里所需要明白的是,在这个流程中,这里 ... -
NSURLProtocol
2014-09-25 10:42 7531、http://nshipster.com/nsurlpro ... -
关于iOS8的extension插件
2014-09-25 10:41 1210关于iOS8的extension插件,有兴趣的同学可以参考一下 ... -
【转】ios app在itunesConnect里面的几种状态
2014-08-05 10:34 1083Waiting for Upload (Yellow) Ap ... -
[转]iOS Dev (45) iOS图标与切片处理工具Prepo
2014-02-07 17:02 982iOS Dev (45) iOS图标与切片处理工具Prepo ... -
phoneGap开发IOS,JS调用IOS方法/phoneGap插件开发
2014-01-13 17:49 1198前沿 废话不说phoneGap是什么不多介绍,官方网站: h ... -
如何在IOS平台下搭建PhoneGap开发环境(PhoneGap2.5)
2014-01-13 15:23 695由于在下最近在做基于HTML5的跨平台移植,搭建环境的时候着实 ... -
xcode 4 制作静态库详解
2013-12-20 18:27 477最近在做Apple的IOS开发,有开发静态库的需求,本身IOS ... -
【翻译】ios教程-创建静态库
2013-12-20 18:19 3000作者:shede333 主页:htt ... -
封装自己的控件库:iPhone静态库的应用
2013-12-20 17:03 509由于iPhone 控件的极度匮乏和自定义组件在重用上的限制,在 ... -
iphone:使用NSFileManager取得目录下所有文件(遍历所有文件)
2013-11-18 17:56 820From:http://note.sdo.com/u/xiao ...
相关推荐
iOS,corelocation,定位,通过经纬度计算距离
12.1 (16A366) Xcode10 12.1模拟器调试包iOS12.1 使用方法:解压完,直接复制到 /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/DeviceSupport 目录下 iOS12.1模拟器专用包 今天刚更新的 ...
使用方法: 1.下载解压 2.关闭xcode 3.将文件复制到 /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/DeviceSupport/ 4.重启xcode
使用方法: 1.下载解压 2.关闭xcode 3.将文件复制到 /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/DeviceSupport/ 4.重启xcode
iOS 13.5 真机调试包
使用方法: 1.下载解压 2.关闭xcode 3.将文件复制到 /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/DeviceSupport/ 4.重启xcode
这是一个简单的CLI,轻松设置当前运行的iOS模拟器地理位置
iOS11.1调试包iOS11.1调试包iOS11.1调试包iOS11.1调试包iOS11.1调试包iOS11.1调试包iOS11.1调试包iOS11.1调试包iOS11.1调试包iOS11.1调试包iOS11.1调试包iOS11.1调试包iOS11.1调试包iOS11.1调试包iOS11.1调试包iOS...
使用方法:解压完,直接复制到 /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/DeviceSupport 目录下 iOS12模拟器专用包 今天刚更新的 模拟器专用 要的拿去
Xcode iOS 16真机调试包 开发调试 iOS16适配
iOS UITableView获取特定位置的cell
xcode免更新IOS17.0真机调试包。
iOS 11 模拟器 15A372 真机测试iOS11 急需,请走不客气 iOS 11 模拟器 15A372 真机测试iOS11 急需,请走不客气
iOS14.2 device support 模拟器调试包 iOS 14.2调试包 将文件复制到 /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/DeviceSupport/ 4.重启xcode
我猜你们要么是躺在沙发上,要么是躲在被窝里用手机和Pad下的单,因为我就是这么干的。当然我也不是瞎猜,天猫官方微博公布的数据为证:无线端交易额占比一路保持在70%以上,最后定格在68%(据说峰值数据更是...
IOS利用苹果地图实现编码,实现地理信息编码的功能
经实测 ios7可用的gba模拟器
真机调试包 ios9.0
ios12.2真机调试包,请自行获取哦,ios12.2真机调试包