- 浏览: 663373 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
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 1658sock_stream 是有保障的(即能保证数据正确传送到 ... -
SOCKET bind INADDR_LOOPBACK和INADDR_ANY的区别
2015-07-23 19:49 2062今天写程序时候,服务器端启动了,然后客户端总是连接不上,con ... -
htons()
2015-07-23 19:26 589在C/C++写网络程序的时候,往往会遇到字节的网络顺序和主机顺 ... -
使用symbolicatecrash分析crash文件
2015-03-10 11:32 1189原文 http://www.cnblogs.com/ning ... -
程序设计中的计算复用(Computational Reuse)
2015-02-10 10:18 677从斐波那契数列说起 ... -
didReceiveMemoryWarning
2015-02-09 16:11 548IPhone下每个app可用的内存是被限制的,如果一个app使 ... -
iOS开发中怎么响应内存警告
2015-02-09 16:08 659好的应用应该在系统内存警告情况下释放一些可以重新创建的资源。在 ... -
ASIHTTPRequest多次重复请求的问题
2014-12-17 14:34 648在一个车票订购的项目中,点击一次订购,却生成了2次订单,通过抓 ... -
从 CloudKit 看 BaaS 服务的趋势
2014-09-26 11:51 731从 6 月份 WWDC 苹果发布 ... -
ios编程--AVCapture编程理解
2014-09-26 11:03 9480、媒体采集的几个东西。这里所需要明白的是,在这个流程中,这里 ... -
NSURLProtocol
2014-09-25 10:42 8301、http://nshipster.com/nsurlpro ... -
关于iOS8的extension插件
2014-09-25 10:41 1303关于iOS8的extension插件,有兴趣的同学可以参考一下 ... -
【转】ios app在itunesConnect里面的几种状态
2014-08-05 10:34 1155Waiting for Upload (Yellow) Ap ... -
[转]iOS Dev (45) iOS图标与切片处理工具Prepo
2014-02-07 17:02 1037iOS Dev (45) iOS图标与切片处理工具Prepo ... -
phoneGap开发IOS,JS调用IOS方法/phoneGap插件开发
2014-01-13 17:49 1250前沿 废话不说phoneGap是什么不多介绍,官方网站: h ... -
如何在IOS平台下搭建PhoneGap开发环境(PhoneGap2.5)
2014-01-13 15:23 755由于在下最近在做基于HTML5的跨平台移植,搭建环境的时候着实 ... -
xcode 4 制作静态库详解
2013-12-20 18:27 554最近在做Apple的IOS开发,有开发静态库的需求,本身IOS ... -
【翻译】ios教程-创建静态库
2013-12-20 18:19 3128作者:shede333 主页:htt ... -
封装自己的控件库:iPhone静态库的应用
2013-12-20 17:03 597由于iPhone 控件的极度匮乏和自定义组件在重用上的限制,在 ... -
iphone:使用NSFileManager取得目录下所有文件(遍历所有文件)
2013-11-18 17:56 878From:http://note.sdo.com/u/xiao ...
相关推荐
在iOS开发中,创建一个罗盘应用涉及到许多关键知识点,主要涵盖Swift编程语言、iOS SDK、CoreLocation框架以及用户界面设计。以下是对这些知识点的详细解释: 1. **Swift编程语言**:Swift是Apple为iOS、macOS、...
这个“iOS 经纬度坐标指南针效果”项目提供了一个简单的指南针Demo,它能够根据用户的实时地理位置信息,指示出目标地点的方向,并且能够随着手机的移动动态调整显示方向。下面我们将详细探讨实现这一功能所需的关键...
真机调试能够获取到真实的地理位置数据,这对于测试和验证轨迹绘制功能至关重要。 3. **实时轨迹绘制**:实时轨迹绘制是通过连续获取设备的位置信息,并在地图上绘制一系列点来形成路径的过程。这需要利用百度地图...
8. **通知和定位服务**:了解如何使用UNUserNotificationCenter发送本地和远程通知,以及获取用户地理位置的权限和使用CoreLocation框架。 9. **错误处理**:学习Swift中的do-catch语句,有效处理程序运行时可能...
例如,你可能需要定义一个`Weather`结构体来存储天气信息,以及一个`Location`协议来处理地理位置数据。 UI设计是移动应用的关键部分。在iOS中,我们使用Interface Builder和Auto Layout创建用户界面。在...
本项目利用iOS SDK中的框架和API来实现天气应用的功能,如CoreLocation用于获取地理位置信息,UIKit则用于构建用户界面。 3. **CoreLocation框架**: CoreLocation框架是iOS中处理地理位置信息的主要工具。它允许...
5. **调试技巧**:如何通过模拟定位来测试应用在特定地理条件下的行为,以及如何有效地调试和解决因地理位置引发的问题。 6. **安全和隐私**:使用此类工具时,必须遵守苹果的开发政策和用户隐私法规,确保不滥用或...
通过理解GPX文件的结构,结合Core Location框架,我们可以为iOS应用创建自定义的模拟路径,这对于开发依赖地理位置的应用非常有用,特别是在没有真实环境的情况下进行测试和调试。在实践中,我们可以根据需要扩展这...
- 使用单元测试和集成测试确保代码质量,利用模拟器或真实设备进行功能测试和性能测试。 通过这个"天气预报app高仿代码"项目,开发者不仅可以学习到天气预报应用的核心技术,还能实践移动开发的各个环节,提升自己...
2. **CoreLocation**:在 Summon 应用中,这个框架必不可少,因为它用于获取和处理地理位置信息。通过CoreLocation,我们可以获取用户的当前位置,以及目标位置的坐标,进而实现精确召唤。 3. **MapKit**:集成...
通常,一个天气应用会涉及到网络请求(获取实时及未来天气数据)、地理位置服务(获取用户位置)、数据解析(处理JSON或XML格式的天气数据)以及本地存储(保存用户偏好或历史查询)等技术。 【标签】中提到的“C#...
为了实现城市选择,开发者可能利用了CoreLocation框架,它提供了获取用户位置和查询全球地理位置的能力。CoreLocation中的CLLocationManager类用于管理定位服务,而CLGeocoder类可以将地址转换为坐标或者反过来。 ...
《Swift编程:构建...总的来说,"LocationTracker-master"项目为我们提供了一个学习Swift中地理位置追踪功能的实践平台,通过分析和理解这个项目,开发者可以更好地掌握Swift编程和iOS中位置服务的使用。
- **CoreLocation Framework**:地理位置定位。 - **CoreMedia Framework**:多媒体核心框架。 - **CoreMotion Framework**:运动传感器数据。 - **CoreTelephony Framework**:电话服务。 - **EventKit ...
7. **权限管理**:为了使用CoreLocation,需要在Info.plist文件中添加NSLocationWhenInUseUsageDescription或NSLocationAlwaysUsageDescription键,以请求用户的地理位置访问权限。 8. **实际应用**:iBeacon技术...
综上所述,Covid-Test-Finder项目涵盖了Swift编程、移动应用开发、地图集成、地理位置服务、网络通信、数据存储等多个方面的知识,为开发者提供了一个全面的实战平台,锻炼和提升了他们在iOS开发领域的技能。
9. **地理定位服务**: 应用可能需要获取用户的地理位置信息以查询当地的天气。使用CoreLocation框架可以获取GPS坐标,然后传递给天气API。 10. **测试与调试**: 使用Xcode的模拟器和真机测试,确保在不同环境下应用...
- **CoreLocation框架**:在iOS应用中,CoreLocation框架用于获取设备的地理位置信息,这在追踪行李的位置时至关重要。 - **定位授权**:应用需要用户的许可才能访问其位置信息,需要正确处理授权请求。 - **定位...
12. **地理定位**:CoreLocation框架用于获取设备的地理位置信息,这对于Uber应用来说必不可少。 13. **多线程与异步编程**:为了确保应用流畅,需要在后台处理耗时任务,可以使用GCD(Grand Central Dispatch)、...