基于IOS平台下的天气软件

上传人:仙*** 文档编号:29779184 上传时间:2021-10-08 格式:DOC 页数:35 大小:1.46MB
收藏 版权申诉 举报 下载
基于IOS平台下的天气软件_第1页
第1页 / 共35页
基于IOS平台下的天气软件_第2页
第2页 / 共35页
基于IOS平台下的天气软件_第3页
第3页 / 共35页
资源描述:

《基于IOS平台下的天气软件》由会员分享,可在线阅读,更多相关《基于IOS平台下的天气软件(35页珍藏版)》请在装配图网上搜索。

1、江西理工大学应用科学学院毕业设计摘 要随着科技的发展,移动智能终端逐渐走进人们的视线,相关应用越来越广泛,并在人们的日常生活中扮演着越来越重要的角色。因此,关键应用程序的开发成为影响移动智能终端普及的重要因素,设计并开发实用、方便的应用程序具有重要的意义和良好的市场前景。IOS作为当前最流行的操作平台,自然也存在着大量的应用服务需求。本课题研究的是基于IOS平台下的天气软件,目的是帮助用户随时随地查询天气信息及天气变化情况,让生活更加舒适方便。本文详细讲述了IOS平台下天气软件的界面设计及异常处理部分,主要包括界面的实现、控件的使用、界面的布局和异常的处理等内容,结合中国气象网的天气数据,将准

2、确的天气情况以友好的方式呈现给用户,使用户可以更加赏心悦目地体验本软件的服务。关键字:IOS;界面;控件;天气软件AbstractWith the development of science and technology, the mobile terminal gradually into the peoples attention, related to more widely, and play an increasingly important role in peoples daily lives. Therefore, the development of critical ap

3、plications has become an important factor in the popularity of the mobile terminal, the design and development of practical, convenient application is of great significance and good market prospects. IOS as the most popular operating platform, naturally, there are a lot of demand for application ser

4、vices.The study of this topic is the weather software, based on the IOS platform is designed to help the user to query weather information and weather changes anytime, anywhere, to make life more comfortable and convenient. This paper describes the software interface design of the IOS platform under

5、 the weather and exception handling part, including the contents of the interface implementation, the use of controls, the layout of the interface, and exception handling, combined with weather data of the China Meteorological Association, will be accurate weather conditions presented to the user-fr

6、iendly way, allows the user to experience more enjoyable the service of this software.KEY WORDS : IOS;interface;control;weather software目 录摘 要iAbstractii目 录iii1 绪论11.1 研究内容11.2 研究目的和意义11.3 研究前景12 IOS开发环境及平台搭建32.1 IOS开发环境介绍32.2 IOS开发平台搭建33 项目分析43.1 用户界面43.2 性能分析43.3 需求分析43.4 异常分析43.5 相关技术介绍53.5.1 Obj

7、ective-C53.5.2 Xcode53.5.3 Cocoapods63.5.4 Mantle63.5.5 LBBlurredImage63.5.6 TSMessages63.5.7 ReactiveCocoa74 界面设计及实现84.1 加载界面84.2主视图的实现94.2.1 状态栏显示设置94.2.2 主视图布局设置114.3 获取天气数据144.3.1 创建天气模型144.3.2 转换JSON数据154.3.3 发送数据请求174.3.4 管理存储数据184.3.5 获取当前位置194.4未来天气界面214.4.1 未来天气界面实现214.4.2 未来天气界面优化235 异常处理2

8、56 界面测试26总结29致 谢30参考文献31311 绪论1.1 研究内容本文介绍了基于IOS平台下天气软件的界面及异常处理部分内容,详细介绍了加载界面、实时天气界面、未来天气界面和搜索界面进行界面设计及实现,出现异常情况的处理等内容,目的是使用户能够更加赏心悦目地体验此软件带来的服务。通过对界面的布局及控件的应用等相关内容的学习,使我们对IOS平台下界面开发工作有一个初步的了解,并且经过这次开发过程,能够基本掌握这些内容。软件开发后能够帮助用户随时随地搜索由中国气象局提供的全国2564个县级以上城市的天气信息,并且把数据显示在一个界面美观、布局合理窗口内,使用户能够舒适的享受软件带来的服务

9、。1.2 研究目的和意义随着智能手机的大众化,越来越多的人应用智能手机。相对的对手机软件的需求也就越来越多。当今时代手机不再只是用来打电话、发短信的工具,反而对手机的娱乐功能要求越来越高。苹果手机作为当今中国智能手机市场上不可或缺的一个品牌,基于IOS的手机软件需求量也就相应的越来越强。智能手机的应用使现代人的生活更加的方便。伴随着苹果手机进入中国市场,相应的IOS技术逐渐流行起来。而对于开发苹果应用的语言Object-C,也成为当今社会最流行的开发语言,并且保持着强劲的上升趋势,隐隐有超过C语言的现象。天气软件是一种非常实用的信息服务,随着智能手机的不断普及,各种智能手机平台下都有各种各样的

10、天气软件。Android作为现在主流的智能手机之一,自然也需要这方面的软件。天气关系到人们的日常生活,如告知温暖,方便出行等。此外,对未来天气的预测还可以帮助人们进行农作物的浇灌、施肥、收割等工作。基于IOS平台的天气软件已经有很多,经过分析,用户第一眼往往是一个软件的外观,一个好看的界面才能让用户以一种爱美之心去尝试,才能进一步了解一个软件的好坏,所以吸引眼球的界面是争取用户的第一步。因此,界面设计工作对应用程序来说非常重要,在界面上吸引了用户,才能进一步让用户体验应用程序中的功能,使用这个软件。1.3 研究前景随着苹果产品的不断推陈出新,相应的各类应用开发也越来越火爆。目前,IOS在智能手

11、机应用下载量中占比33%,IOS平板电脑应用下载量占比75%,由此可见,IOS相关应用软件有着庞大的消费众群。而产品的升级换代,新产品的开发,都离不开手机软件开发团队强有力的支持。现在各大企业都在积极扩充研发队伍,像是游戏软件开发的岗位缺口就非常大。其8-10万的年薪,让很多年轻人加入到学习IOS开发的队伍中。 据对在读学习人群统计,目前大部分学员来自应届的大学生。众所周知,现在大学生就业难,薪水低。而学习IOS开发,不但可以掌握最新的技术,还可以找到薪水福利不错的工作,未来也有很大的发挥空间。另一部分人群,则是IOS相关从业人员,随着技术的日新月异,希望能通过短时间集中培训,使技能得到提升,

12、更好的应用到实际工作中。 近两年随着iphone的兴起,基于iphone的第三方应用软件频出不穷,参与的IOS开发人员也越来越多,在此情况下,很多APP的质量以及用户体验都无法完全保证。以iphone天气预报作为例子:它出现在市场上的时间很早,目前存在的数量也很多,但是功能不全,用户体验不到位,界面不美观,没有吸引用户使用甚至长时间使用的独特优势。但是作为工具类APP,天气预报的作用巨大且不可替代,很多用户不得不为了可以预知天气情况而忍受了其软件商家强行植入广告以及糟糕的体验。为了改善这种情况,iphone天气预报,作为iphone工具类APP,肩负着重要的意义。它需要在基本的预知天气外,还可

13、以预知未来温度,湿度,风力情况等,做到功能全面且具备娱乐性;同时还具有绚丽的界面以及优秀的用户体验,形成一个实用并且高质量的iphone应用。2 IOS开发环境及平台搭建2.1 IOS开发环境介绍开发环境的要求硬件:1.苹果电脑, 必须是基于Intel的Macintosh计算机。2.iPhone或iPod Touch,主要用来测试编写好的程序。软件: 1.苹果系统MacOS。2.iPhone SDK(请从开发环境的简单介绍开发环境主要包括:1.Xcode (主要开发工具)。2.Interface Builder (界面快速设计工具)。3.iPhone Simulator (iPhone模拟器)

14、。4.SDK(Software Development Kit,软件开发工具包)。2.2 IOS开发平台搭建准备一台装有MAC_OS_X的MAC BOOK(必须是基于Intel的Macintosh计算机),如果没有苹果的电脑可以选择在windows系统电脑下安装虚拟机 VMware Workstation再安装MAC_OS_X系统,然后下载并安装IOS SDK及开发工具 Xcode在MAC中找到iPhoneSDK的安装文件,鼠标双击该文件图标,会看到一个弹出窗口:进一步选择继续并且等待安装完成。注意在安装过程中需要退出ITUNES这样,整个平台的搭建工作就完成了。3 项目分析3.1 用户界面

15、根据应用程序的功能需要,对用户界面做如下分析:1.加载界面:程序开始运行时显示加载界面,此界面是应用程序最先展示的窗口,所以,要尽量保持界面信息简洁,突出重点。这里设置为显示学校的名称、英文缩写及版权信息。此界面的作用是,不仅将软件的基本信息显示给用户,而且在加载的过程中进行数据的初始化工作,将应用程序运行时需要的天气信息提前做准备;2.实时天气界面:显示城市当前的实时天气状况,包括城市名称、天气描述、温度高低、风速、天气描述图片、获取数据时间、日期、星期、温馨提示和是否默认城市等信息。此界面是应用程序的主界面,所以在设计的时候应尽量使界面美观,将天气数据以用户所容易接受的方式呈现出来;3.未

16、来天气界面:对未来6天的天气情况简要描述,简要显示星期、天气描述、温度高低等数据,使用户一目了然,使人们及时了解天气变化,对日常生活出行、穿衣做好准备;经过以上分析可知,应用程序共需要三个界面,即加载界面、实时天气界面、未来天气界面,来实现应用程序中的基本功能。3.2 性能分析程序响应速度快,安全性能高,信息处理速度快,操作界面简单直接,反馈信息直观清楚,给用户带来良好的使用体验。3.3 需求分析1.能够查询显示手机当前位置的天气情况及其未来几天或几小时内天气的变化情况。2.显示当前最高,最低气温。3.系统必须具有安全性,可靠性,独立性。3.4 异常分析当应用程序中的界面没有正常显示天气数据,

17、出现假死或者跑出程序错误时,视为程序异常。经过分析,应用程序在连接网络和解析数据时,容易出现异常,所以在设计的时候应仔细分析原因,并且认真对待,在出现异常的地方给出具体解决方案,使用户享受到更友好的体验。3.5 相关技术介绍3.5.1 Objective-CObject-C是扩充C的面向对象编程语言。它主要使用于Mac OS X和GNUstep这两个使用OpenStep标准的系统,而在NeXTSTEP和OpenStep中它更是基本语言。Objective-C可以在gcc运作的系统写和编译,因为gcc含Objective-C的编译器。1980年代初布莱德确斯(Brad Cox)在其公司Steps

18、tone发明Objective-C。目前主要是编写iOS操作系统应用程序的利器。近几年Objective-C排名大幅提升,它的流行当归功于iphone的成功,因为Objective-C一直被用于编写iPhone应用程序。 Objective-C是非常实际的语言。它是一个用C写成、很小的运行库,只会令应用程序的大小增加很小,和大部分OO系统使用极大的VM执行时间会取代了整个系统的运作相反。ObjC写成的程序通常不会比其原始码大很多。而其函式库亦和Smalltalk系统要使用极大的内存来开启一个窗口的情况相反。3.5.2 XcodeXcode是苹果公司向开发人员提供的集成开发环境(非开源),用于开

19、发Mac OS X,iOS的应用程序。其运行于苹果公司的Mac操作系统下。不管你用C、C+、Objective-C或Java编写程序,在AppleScript里编写脚本,还是试图从另一个奇妙的工具中转移编码,你会发现 Xcode 编译速度极快。每次操作都很快速和轻松。Xcode 将赋予你创建诸如计算和渲染引擎应用程序的能力,这些应用程序使用64位内存定址。这非常适合数据集中的应用程序,其通过访问内存中的数据运行速度更快,远胜于磁盘访问。Xcode 将为你提供工具来建立并调试适合 Intel Core i5, i7 和 Mac OS X Lion 的 32 或 64 位应用程序,还可以让你创建包

20、含32位和64位执行能力的 Fat Binaries。Xcode 拥有众多功能,为 Java 开发人员赋予了更多的开发能力。利用改进的 Code Sense 索引及 Ant 项目模板,Java 用户可以继续使用他们的标准 Java 包,并构建具有 Xcode 关键生产功能的工具。Java 代码填充为你提供类别名、方法、变量及其他关键信息。在 Xcode 中创建 Java应用程序比以往更容易。因为 Xcode 支持 CodeWarrior 风格相关项目参考,所以可以保证把 CodeWarrior 项目文件快速方便地转移到 Xcode。因为 Xcode 兼容 CodeWarrior 风格在线编码汇

21、编,所以从 CodeWarrior 到 Xcode 转变的消耗得到降低, 也使得开发人员手动调整应用程序的临界性能部分。苹果电脑公司的 Mac OS X 综合开发环境Xcode 为各种类型的 Mac OS X软件项目提供项目编辑、搜索和浏览,文件编辑,项目构建和调试设备等功能。Xcode 可用来辅助开发应用程序、工具、架构、数据库、嵌入包、核心扩展和设备驱动程序。Xcode 支持开发人员使用 C、 C+、Objective C、 AppleScript 和 Java。Xcode 能够和 Mac OS X 里众多其它的工具协作,例如综合用户界面结构应用程序;编译器如 gcc、javac 和jik

22、es;还有调试工具如 gdb。另外,你可以用 AppleScript Studio 组增加一个 Aqua 界面到系统和应用程序脚本、命令行工具、以及网络应用程序中。以上三者无论如何都能在任何平台组合成最强大的脚本环境。3.5.3 Cocoapods在进行iOS开发的时候,总免不了使用第三方的开源库,比如SBJson、AFNetworking、Reachability等等。使用这些库的时候通常需要:l 下载开源库的源代码并引入工程l 向工程中添加开源库使用到的frameworkl 解决开源库和开源库以及开源库和工程之间的依赖关系、检查重复添加的framework等问题l 如果开源库有更新的时候,

23、还需要将工程中使用的开源库删除,重新执行前面的三个步骤,顿时头都大了。自从有了CocoaPods以后,这些繁杂的工作就不再需要我们亲力亲为了,只需要我们做好少量的配置工作,CocoaPods会为我们做好一切!CocoaPods是一个用来帮助我们管理第三方依赖库的工具 。它可以解决库与库之间的依赖关系,下载库的源代码,同时通过创建一个Xcode的workspace来将这些第三方库和我们的工程连接起来,供我们开发使用。使用CocoaPods的目的是让我们能自动化的、集中的、直观的管理第三方开源库。3.5.4 MantleMantle是一个建模框架,实现了多个不同的NSCoding和NSCopyin

24、g方法,还添加了许多非常便利的方法允许你实现更多有用的功能,比如返回一个json字典,以代表你的对象。很多情况下,Mantle可以作为Core Data的替代选择。3.5.5 LBBlurredImageLBBlurredImage 是 UIImageView 的分类,用于设置图像并进行模糊化处理。你将仅仅用一行代码来创建一个神奇的模糊效果。3.5.6 TSMessagesTSMessages可用于创建展示在屏幕顶端的自定义信息/通知提醒。通知在屏幕顶端展开,并根据展示文本的长度停留数秒。可通过向上滑动屏幕或者点击屏幕来解除通知。 TSMessages提供了四种类型的通知:Success、Er

25、ror、 Warning和Message。支持iOS 7.图3.1 警告效果图3.5.7 ReactiveCocoaReactiveCocoa是github去年开源的一个项目,是在iOS平台上对FRP的实现。FRP的核心是信号,信号在ReactiveCocoa(以下简称RAC)中是通过RACSignal来表示的,信号是数据流,可以被绑定和传递。可以把信号想象成水龙头,只不过里面不是水,而是玻璃球(value),直径跟水管的内径一样,这样就能保证玻璃球是依次排列,不会出现并排的情况(数据都是线性处理的,不会出现并发情况)。水龙头的开关默认是关的,除非有了接收方(subscriber),才会打开。

26、这样只要有新的玻璃球进来,就会自动传送给接收方。可以在水龙头上加一个过滤嘴(filter),不符合的不让通过,也可以加一个改动装置,把球改变成符合自己的需求(map)。也可以把多个水龙头合并成一个新的水龙头(combineLatest:reduce:),这样只要其中的一个水龙头有玻璃球出来,这个新合并的水龙头就会得到这个球。Signal and Subscriber这是RAC最核心的内容,Signal获取到数据后,会调用Subscriber的sendNext, sendComplete, sendError方法来传送数据给Subscriber,Subscriber自然也有方法来获取传过来的数据

27、,如:signal subscribeNext:error:completed。这样只要没有sendComplete和sendError,新的值就会通过sendNext源源不断地传送过来。Signal是很灵活的,它可以被修改(map),过滤(filter),叠加(combine),串联(chain),这有助于应对更加复杂的情况。4 界面设计及实现4.1 加载界面加载界面是程序开始运行时加载的界面。由分析可知,界面的主要功能是为应用程序的运行做准备,包括数据库的初始化工作,下载默认城市天气信息等。在界面中主要显示的应用程序的基本信息。设计如下:图4.1 加载界面设计图根据设计,实现加载界面主视图

28、控制器View Controller,使用的布局文件是WXController.m。选中SimpleWeather项目,单击FileNewFile,并且选择Cocoa TouchObjective-C class. 命名为WXController,并设置为UIViewController的子类。确保Targeted for iPad和With XIB for user interface都没有选中,如下图所示:图4.2 创建WXController文件4.2 主视图的实现4.2.1 状态栏显示设置首先.初始化并设置WXController实例作为App的根视图控制器。通常这个控制器是一个的UI

29、NavigationController或UITabBarController,设置默认的视图控制器来显示你的TSMessages。这样做,将不再需要手动指定要使用的控制器来显示警告。实现代码如下:- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions self.window = UIWindow alloc initWithFrame:UIScreen mainScreen bounds; self.window.rootViewC

30、ontroller = WXController alloc init; self.window.backgroundColor = UIColor whiteColor; self.window makeKeyAndVisible; TSMessage setDefaultViewController: self.window.rootViewController; return YES; 构建app并运行会发现状态栏为黑色,显示不够清晰,效果如下图:图4.3状态栏显示图1在iOS7,UIViewController有一个新的API,用来控制状态栏的外观,打开WXController,添加下

31、面的代码到-viewDidLoad即可实现。-(UIStatusBarStyle)preferredStatusBarStyle return UIStatusBarStyleLightContent;重新构建app并运行会发现这段代码起作用了,状态栏显示为白色,状态栏显示效果如下图:图4.4状态栏显示图24.2.2 主视图布局设置在项目中创建并设置视图,单击FileAdd Files to “SimpleWeather”.定位到所需图片文件夹并选择它。选择Copy items into destination groups folder (if needed),然后单击Add。打开WXCon

32、troller.m,使用如下代码替换掉-viewDidLoad中设置背景色的代码。self.screenHeight = UIScreen mainScreen.bounds.size.height; UIImage *background = UIImage imageNamed:bg; self.backgroundImageView = UIImageView alloc initWithImage:background; self.backgroundImageView.contentMode = UIViewContentModeScaleAspectFill; self.view

33、addSubview:self.backgroundImageView; self.blurredImageView = UIImageView alloc init; self.blurredImageView.contentMode = UIViewContentModeScaleAspectFill; self.blurredImageView.alpha = 0; self.blurredImageView setImageToBlur:background blurRadius:10 completionBlock:nil; self.view addSubview:self.blu

34、rredImageView; self.tableView = UITableView alloc init; self.tableView.backgroundColor = UIColor clearColor; self.tableView.delegate = self; self.tableView.dataSource = self; self.tableView.separatorColor = UIColor colorWithWhite:1 alpha:0.2; self.tableView.pagingEnabled = YES; self.view addSubview:

35、self.tableView; 该代码实现了.获取并存储屏幕高度。之后,在用分页的方式来显示所有天气数据时,使用它。创建一个静态的背景图,并添加到视图上。使用LBBlurredImage来创建一个模糊的背景图像,并设置alpha为0,使得开始backgroundImageView是可见的。创建tableview来处理所有的数据呈现。 设置WXController为delegate和dataSource,以及滚动视图的delegate,设置pagingEnabled为YES。table view有两个部分,一个是每小时的天气预报,另一个用于每日播报。table view的section数目,设置

36、为2。天气预报的cell是不可选择的。设置为一个半透明的黑色背景和白色文字。其代码如下:#pragma mark - UITableViewDataSource (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView return 2; - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section return 0; - (UITableViewCell *)tableView:(UITableView *)

37、tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath static NSString *CellIdentifier = CellIdentifier; UITableViewCell *cell = tableView dequeueReusableCellWithIdentifier:CellIdentifier; if (! cell) cell = UITableViewCell alloc initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:CellIdentif

38、ier; cell.selectionStyle = UITableViewCellSelectionStyleNone; cell.backgroundColor = UIColor colorWithWhite:0 alpha:0.2; cell.textLabel.textColor = UIColor whiteColor; cell.detailTextLabel.textColor = UIColor whiteColor; return cell;在WXController.m的-viewDidLoad中,设置布局框架和边距,设置table的header大小与屏幕相同。你将利用的

39、UITableView的分页来分隔页面页头和每日每时的天气预报部分。创建inset(或padding)变量,以便您的所有标签均匀分布并居中。创建并初始化为各种视图创建的高度变量。设置这些值作为常量,使得可以很容易地在需要的时候,配置和更改您的视图设置。使用常量和inset变量,为label和view创建框架。复制图标框,调整它,使文本具有一定的扩展空间,并将其移动到该图标的右侧。当把标签添加到视图,会看到布局的效果。CGRect headerFrame = UIScreen mainScreen.bounds;CGFloat inset = 20;CGFloat temperatureHeig

40、ht = 110;CGFloat hiloHeight = 40; CGFloat iconHeight = 30; CGRect hiloFrame = CGRectMake(inset, headerFrame.size.height - hiloHeight, headerFrame.size.width - (2 * inset), hiloHeight); CGRect temperatureFrame = CGRectMake(inset, headerFrame.size.height - (temperatureHeight + hiloHeight), headerFrame

41、.size.width - (2 * inset), temperatureHeight); CGRect iconFrame = CGRectMake(inset, temperatureFrame.origin.y - iconHeight, iconHeight, iconHeight); CGRect conditionsFrame = iconFrame; conditionsFrame.size.width = self.view.bounds.size.width - (2 * inset) + iconHeight) + 10); conditionsFrame.origin.

42、x = iconFrame.origin.x + (iconHeight + 10);最后就是设置当前view为你的table header,构建每一个显示气象数据的标签,并添加一个天气图标的图像视图。代码如下:UIView *header = UIView alloc initWithFrame:headerFrame;header.backgroundColor = UIColor clearColor;self.tableView.tableHeaderView = header; UILabel *temperatureLabel = UILabel alloc initWithFra

43、me:temperatureFrame; temperatureLabel.backgroundColor = UIColor clearColor;temperatureLabel.textColor = UIColor whiteColor; temperatureLabel.text = 0;temperatureLabel.font = UIFont fontWithName:HelveticaNeue-UltraLight size:120; header addSubview:temperatureLabel; UILabel *hiloLabel = UILabel alloc

44、initWithFrame:hiloFrame; hiloLabel.backgroundColor = UIColor clearColor; hiloLabel.textColor = UIColor whiteColor; hiloLabel.text = 0 / 0; hiloLabel.font = UIFont fontWithName:HelveticaNeue-Light size:28;header addSubview:hiloLabel; UILabel *cityLabel = UILabel alloc initWithFrame:CGRectMake(0, 20,

45、self.view.bounds.size.width, 30);cityLabel.backgroundColor = UIColor clearColor;cityLabel.textColor = UIColor whiteColor;cityLabel.text = Loading.; cityLabel.font = UIFont fontWithName:HelveticaNeue-Light size:18;cityLabel.textAlignment = NSTextAlignmentCenter;header addSubview:cityLabel; UILabel *c

46、onditionsLabel = UILabel alloc initWithFrame:conditionsFrame; conditionsLabel.backgroundColor = UIColor clearColor; conditionsLabel.font = UIFont fontWithName:HelveticaNeue-Light size:18; conditionsLabel.textColor = UIColor whiteColor; header addSubview:conditionsLabel; UIImageView *iconView = UIIma

47、geView alloc initWithFrame:iconFrame; iconView.contentMode = UIViewContentModeScaleAspectFit;iconView.backgroundColor = UIColor clearColor; header addSubview:iconView;构建app并运行,布局标签显示效果如下图,用手指轻轻推动桌面,当你滚动它的时候,会有反弹效果。图4.5 布局显示效果图4.3 获取天气数据 从OpenWeatherMap的API拉取数据。 OpenWeatherMap是一个非常棒的服务,旨在提供实时,准确,免费的天

48、气数据给任何人。遵循以下基本步骤,来获你设备的位置的气象数据:1.找到设备的位置。2.从API端下载JSON数据。3.映射JSON到WXConditions和WXDailyForecasts。4.告诉UI有新数据了。4.3.1 创建天气模型创建天气模型和数据管理类。单击FileNewFile并选CocoaTouchObjective-C class。命名为WXClient并使其为NSObject的子类。这样再做三次创建以下类:1.WXManager作为NSObject的子类。2.WXCondition作为MTLModel的子类。3.WXDailyForecast作为WXCondition的子类

49、。模型将使用Mantle,打开WXCondition.h,修改接口。MTLJSONSerializing协议告诉Mantle序列化该对象如何从JSON映射到Objective-C的属性,并从天气状况映射到图像文件。接口代码如下:interface WXCondition : MTLModel property (nonatomic, strong) NSDate *date; property (nonatomic, strong) NSNumber *humidity; property (nonatomic, strong) NSNumber *temperature;property (

50、nonatomic, strong) NSNumber *tempHigh; property (nonatomic, strong) NSNumber *tempLow; property (nonatomic, strong) NSString *locationName; property (nonatomic, strong) NSDate *sunrise; property (nonatomic, strong) NSDate *sunset; property (nonatomic, strong) NSString *conditionDescription;property

51、(nonatomic, strong) NSString *condition; property (nonatomic, strong) NSNumber *windBearing; property (nonatomic, strong) NSNumber *windSpeed; property (nonatomic, strong) NSString *icon; -(NSString *)imageName; end天气状况与图像文件的连接,声明获取图像文件名的公有方法。打开WXCondition.m,添加如下方法:+ (NSDictionary *)imageMap static

52、NSDictionary *_imageMap = nil; if (! _imageMap) _imageMap = 01d : weather-clear, 02d : weather-few, 03d : weather-few, 04d : weather-broken, 09d : weather-shower, 10d : weather-rain, 11d : weather-tstorm, 13d : weather-snow, 50d : weather-mist, 01n : weather-moon, 02n : weather-few-night, 03n : weat

53、her-few-night, 04n : weather-broken, 09n : weather-shower, 10n : weather-rain-night, 11n : weather-tstorm, 13n : weather-snow, 50n : weather-mist, ; return _imageMap; -(NSString *)imageName return WXCondition imageMapself.icon;4.3.2 转换JSON数据把嵌套的JSON值映射到Objective-C的属性,利用的Objective-C的Key-Value Coding和

54、Mantle的MTLJSONAdapter。在WXCondition.m,通过添加+JSONKeyPathsByPropertyKey方法,“JSON到模型属性”的映射,且该方法是MTLJSONSerializing协议的require。dictionary的key是WXCondition的属性名称,而dictionary的value是JSON的路径。+ (NSDictionary *)JSONKeyPathsByPropertyKey return date: dt, locationName: name, humidity: main.humidity, temperature: main

55、.temp, tempHigh: main.temp_max, tempLow: main.temp_min, sunrise: sys.sunrise, sunset: sys.sunset, conditionDescription: weather.description, condition: weather.main, icon: weather.icon, windBearing: wind.deg, windSpeed: wind.speed ; 从JSON数据映射到Objective-C属性有一个问题,属性date是NSDate类型的,但JSON有一个Unix时间类型(sjps

56、ega注:即从1970年1月1日0时0分0秒起至现在的总秒数)的NSInteger值。需要完成两者之间的转换。Mantle正好有一个功能来为你解决这个问题:MTLValueTransformer。这个类允许你声明一个block,详细说明值的相互转换。要创建一个为一个特定属性的转换器,可以添加一个以属性名开头和JSONTransformer结尾的类方法。所以在WXCondition.m中添加以下为NSDate属性设置的转换器。+ (NSValueTransformer *)dateJSONTransformer return MTLValueTransformer reversibleTrans

57、formerWithForwardBlock:(NSString *str) return NSDate dateWithTimeIntervalSince1970:str.floatValue; reverseBlock:(NSDate *date) return NSString stringWithFormat:%f,date timeIntervalSince1970; ; + (NSValueTransformer *)sunriseJSONTransformer return self dateJSONTransformer; + (NSValueTransformer *)sun

58、setJSONTransformer return self dateJSONTransformer;Current的第一个key是main,最高温度存储在key temp_max中,而daily forecast的第一个key是temp,最高温度存储在key max中。key Temperature的差异放在一边,其他都一样。所以,需要做的是修改daily forecasts的键映射。打开WXDailyForecast.m重写+JSONKeyPathsByPropertyKey方法,获取WXCondition的映射,并创建它的可变副本。需要为daily forecast做的是改变max和min键映射。然后返回新的映射。代码如下:+ (NSDictionary *)JSONKeyPathsByPropertyKey NSMutableDictionary *paths = super JSONKeyPathsByPropertyKey mutableCopy; pathstempHigh = temp.max; pathstempLow = temp.mi

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!