资源目录
压缩包内文档预览:(预览前20页/共39页)
编号:30321996
类型:共享资源
大小:3.29MB
格式:ZIP
上传时间:2019-12-11
上传人:遗****
认证信息
个人认证
刘**(实名认证)
湖北
IP属地:湖北
20
积分
- 关 键 词:
-
iPhone
漫画
客户端
- 资源描述:
-
iPhone漫画客户端,iPhone,漫画,客户端
- 内容简介:
-
毕业设计(论文)任务书课题名称 iPhone漫画客户端开发 学院(部) 信息工程学院 专 业 电子信息工程 班 级 2403100110 学生姓名 方辉 学 号 240310011010 3 月 3 日至 7 月 27 日共 17 周指导教师(签字) 教学院长(签字) 年 月 日一、 设计内容(论文阐述的问题)1. 广泛了解iOS开发的流程,以及iOS应用前景2. iOS漫画客户端的设计二、 设计原始资料(实验、研究方案)1. iOS开发相关的博客2. iOS开发书籍三、设计完成后提交的文件和图表(论文完成后提交的文件)1. 计算说明书部分:(1)漫画客户端的使用说明2、图纸部分:(1)漫画客户端的功能截图四、毕业设计(论文)进程安排序号 设计(论文)各阶段名称 日期(教学周) 1 阅读相关书籍,完成开题报告。 第1-4周 2 查询相关资料,完善程序 第5-6周3 优化代码 第7-10周4 检测bug 第11周5 撰写毕业设计论文 第12-15周 6 提交论文评审与答辩 第16-17周五、主要参考资料 1 Vandad NahavandipooriOS 7 Programming CookbookMthe United States of America:OReilly Media Inc,2013:1-525 2 孙卫琴精通Struts基于MVC的JavaWeb设计与开发M 北京:电子工业出版社,2005:10-503科施恩(KochanS.G)著张波黄湘琴等译.Objective-C 2.0程序设计M.北京:机械工业出版社,2009,9:1-104J Carlo Chung. Pro Objective-C Design Patterns for i0SM.America: Apress,March 2011:45-1825John Ray著袁国忠郝记生译.iphone开发入门经典(第二版)M.北京:人民邮电出版社,2011.11:60-90.6关东升著.ios网络编程与云端应用最佳实现M.北京:清华大学出版社,2013.5.1:100-150.7Stanley B.LippmanBara E.Moo JoseeLajoie等著李师贤等译.C+ Primer中文版M.北京:人民邮电出版社,2006.6.1:120-160.8 Matt Neuburg. Programming iOS 4M.America:0Reilly Media, Inc, May2011:27-278.9 沙梓社,吴航,刘瑾.iOS应用逆向工程:分析与实战M.北京:机械工业出版社,2014:22-119.10Apple Inc,iOS 参考库EB/OL.2013.9.18/library/ios/recipes/xcode_help-source_editor/_index.html#/apple_ref/doc/uid/TP4000997511Apple Inc,iOS 参考库EB/OL.2014.5.19/library/ios/qa/qa1686/_index.html#/apple_ref/doc/uid/DTS4000988212Apple Inc,iOS 参考库EB/OL.2012.6.11/library/ios/documentation/Networking/Conceptual/CFNetwork/Introduction/Introduction.html#/apple_ref/doc/uid/TP30001132 4长安大学毕业设计(论文)开题报告表课题名称iPhone漫画客户端开发课题来源自选课题课题类型工程设计指导教师靳钊学生姓名方辉学 号2403100110专 业电子信息工程(内容包括:课题的意义,国内外发展状况,本课题的研究内容、方法、手段及预期成果,任务完成的阶段安排及时间安排,完成任务所具备的条件因素等。) 1. 课题意义: 漫画是以图片加上简单的文字传达出比单一文字更让人身临其境更好的感受故事的情节的艺术作品,通常以书籍的形式出现,让漫画爱好者观看。相对于下载漫画,在线漫画更注重“在线”二字,也就是说,一般在线漫画指在线观看漫画,而不是下载到本地电脑后观看。如果下载到本地观看,一般只能使用漫画下载器。 而iPhone漫画客户端可以把传统的纸质阅读更加精彩的展现在手机屏幕上。添加闪屏、旋转、飞入、魔幻等多种特效到漫画播放过程中,让故事从漫画书中跳跃出来,立体地呈现在用户面前。这样看漫画更加生动,更加触动人心,让漫画在人们的掌中宾彩纷呈。2. 国内外发展状况:手机与互联网的融合形成的移动互联网业务是与传统互联网以及传统移动通信业务完全不同的新型业务,移动互联网催生的新型需求日益成为传统IT与通信巨头的蓝海。随着社会的不断发展,各种各样的手机软件参与了人类的活动和社会活动,因此改善人和人之间的关系,使人对人的交流更为广泛。还可以促进大脑智力的发展,让人们的思维更活跃。现今,人类己进入了信息化网络3G时代,手机的应用范围越来越广泛。IOS最初是设计在iPhone上的操作系统,苹果公司于2007年1月9日的WWDC大会上公布了这个系统,并命名为iPhone OS,但随着此系统在iPod touch、iPad以及Apple TV等苹果产品上的广泛应用,苹果公司于2010年6月7日WWDC大会上将其改名为IOS。目前苹果的iPhone已经取得很大成功,其推出的软件商店模式也使得开发者大量参与进来,极大丰富了iPhone的功能,也使开发者有了致富机会,而在中国,移动、电信、联通纷纷推出自己的应用程序商店,并不只为效仿苹果App Store的商业模式,更多的是看到丰富的应用程序在未来将成为用户选择运营商和手机平台的决定因素;而对于开发者来说,手机软件商店开发者分成模式将成为他们的另一个金矿。同时iPhone最大的问题,这是一个封闭的系统,代码的不开源,从操作系统到开发语言的独具一帜,这注定了开发人员不多,相对于其他操作平台开发人员渐现后劲不足。3. 本课题的研究内容、方法、手段及预期结果:(1).内容: 本课题深入分析了iPhone漫画客户端的背景及意义、iPhone应用的现状和发展趋势。在前人的研究基础上对iPhone在线漫画客户端进行了重构和设计。该客户端通过服务器接口调取数据并解析出来,实现了各个首页的展示,实现对漫画简介、章节、评分、评论以及分享等等功能。详细功能的设计和实现。(2)方法: 安装iOS开发环境,查阅相关开发资料,然后着手开发,最后优化程序。(3).本课题研究手段: 通过查阅最新官方文档及一些论坛上的教程,结合自己的开发经验,开发iPhone漫画客户端,实现各项功能。(4).预期成果: 实现iPhone漫画客户端的在线阅读功能,本地收藏,下载等功能。 4、任务完成的阶段安排及时间安排第1-4周阅读相关书籍,完成开题报告。第5-6周查询相关资料,完善程序第7-10周优化代码第11周检测bug第12-15周撰写毕业设计论文第16-17周提交论文评审与答辩五、任务所具备的条件因素老师的悉心指导,在学校学习的基础知识。iOS开发环境。iOS开发经验。在线漫画服务器接口。 指导教师意见及建议: 指导教师签名: 年 月 日注:1、课题来源分为:国家重点、省部级重点、学校科研、校外协作、实验室建设和自选项目;课题类型分为:工程设计、专题研究、文献综述、综合实验。 2、此表由学生填写,交指导教师签署意见后方可开题。长安大学毕业设计(论文)成绩评定书 信息工程 学院毕业设计(论文)答辩委员会于 2013 年 6 月 17 日审查了 电子信息工程 专业学生 方辉 的毕业论文: iPhone漫画客户端 。根据院答辩委员会的评分原则,评定该同学毕业设计(论文)成绩为: 良好 。 长安大学 信息工程 学院答辩委员会2013 年 6 月 装订线毕业设计报告纸 长安大学毕业设计(论文)外文文献翻译毕业设计(论文)题目iPhone漫画客户端开发 翻译 题目iOS移动应用eStudent的开发学 院信息工程学院专 业电子信息工程姓 名方辉班 级24031001学 号2403100110指导教师靳钊译文:iOS移动应用eStudent的开发/10.3991/ijim.v7i1.2295M. Antic, S. Jovanovic and S. CvetanovicMetropolitan University, Belgrade, Serbia 摘要iOS是苹果公司为苹果移动设备开发的苹果移动操作系统。最初是为了iPhone开发的,后来也用于iPod Touch, iPad, AppleTV。Metropolitan大学有一个名为eStudent的Web应用,它可以使学生通过网络获得关于全部科目分数,经济,考试日程安排,教授和助教的信息,而且还可以递交考试报名和教学意见反馈等等。本篇论文介绍了iOS平台下的eStudent手机应用。该应用使学生们可以随时用他们的iPhone手机从eStudent Web应用上获取信息并在他们的iPhone用户界面(UI)上展示。本文详细阐述了eStudent iOS移动应用的软件需求分析,系统结构,系统建模,和UI。索引Apple, API, Ruby On Rails, Objective C I.前言 iOS ( iPhone OS)是苹果移动操作系统(苹果移动设备操作系统)。最初是为了iPhone开发的,后来也用于iPod Touch, iPad, AppleTV。据有关统计,从2011年10月起,AppStore(苹果的iOS应用商店)下载量超过18000000000次的已有500,000个 iOS应用。 关于为什么要使用iOS平台的几个争论:1. 统一的市场2. iOS设备出色的用户满意度(体验)3. 给开发商们的精确和清晰的建议4. 许多学生使用iOS设备 (iPhone, iPad, ) 在Belgrade的Metropolitan大学使用eStudent网页应用,帮助学生通过网络获得关于全部科目分数,经济,考试日程安排的信息,而且还可以递交考试报名和教学意见反馈等等。然而,由于越来越多的学生口袋中通常都有iPhone这样的智能手机,就有了可以使学生随时用iPhone手机来使用eStudent网页应用的eStudent移动应用的需求。 本篇论文介绍了eStudent移动应用的开发。它包括以下几个方面:1. 软件需求分析(应用功能分析)2. 定义系统架构3. iOS eStudent移动应用的模型4. API(应用编程接口)开发5. 用户界面开发II. 软件需求分析 在分析过程中,对iOS手机应用软件eStudent的需求被分为不同的部分,其主要目的是解释如何将eStudent 网页应用适宜地呈现在iPhone移动设备上。eStudent网页应用有5个独立部分,因此eStudent iOS程序也被分为5个部分(5个选项卡)。1. 报表:“报表”显示了学生所有当前学习学科的成绩。这里的主要目的是为了尽可能适应手机屏幕的尺寸来呈现信息,同时也为了适应iOS移动设备的“本土”控件(由苹果设计的)。在这个过程中,开发人员的经验是一个重要的因素,由苹果提供的人机界面指南,它给设计师和开发人员如何在小屏幕上的当前数据一些建议,也很重要。图1显示了一张在eStudent网页应用上的一门正在教学的课程的“报表”2. 经济:这一页用来显示经济数据(财务责任,债务,和该学年花费等)。在这里,无论从当前和上一年度可以简单的访问的经济数据是很重要的。因此在导航栏中,我们可以轻松地访问之前年度而不仅仅只是今年。此外,可以很方便地通过两个独立的表区分花费和债务,所以可适用一些数据过滤模式。图2在eStudent网页应用上显示了学生的经济页面。3. 考试报名:考试注册页面是对学生非常重要,因为它是eStudent应用程序的最重要的功能之一。它必须显示所有相关信息,如考试报名确认,报名截止日期,考试安排的日期和时间等等。需求分析后,决定在同一屏幕上呈现整个考试日程安排表,并有可能从列表中相关数据中选择重置考试日期和时间。同时,也是为了可以通过单点触碰(按下一个按钮)来执行考试报名。并且,服务器响应将在相应的通知窗口显示。图3显示了目前考试注册页面在eStudent Web应用程序的样子。4. 教授:在“教授”页面为每一个学生提供了相关教学科目的讲师和教学助理的有关信息。结果发现所有相关数据可以在一张表中呈现。5. 学生反馈:学生们把他们对教学质量(他们对每教学科目教学质量的满意度和印象)的反馈,每年两次(每学期一次)。需求分析后,决定了将相关数据作为一个HTML文件呈现在手机屏幕上,学生的手机发送一个请求后,数据由大学的Web服务器创建并发送到移动设备上。III.系统架构图4给出了由系统需求得到的系统架构。它是一个分布式的移动应用程序,其中的iOS eStudent移动应用程序与eStudent Web服务器通过使用HTTP 协议(GET,POST)进行通信,而数据则是存储于JSON格式中。iOS原生应用程序使用的是苹果的 Cocoa Touch框架(移动接口)编写的。eStudent iOS手机应用分为以下四个方面(图5):1. 数据模型,数据描述2. 表达层.xib文件,描述用户界面UI3. 控制器控制界面和操作数据的业务逻辑4. 单独对象负责与API的通信IV.过程模型和对象模型在最高的抽象级别,所有的过程都是在一个树的形式显示,在这里我们也可以看到子过程的呈现。五个过程:查看报表,查看经济,考试报名,查看教授,并发送反馈。图6显示了过程模型。图7、图8展现了eStudent iOS应用的对象模型。基于系统用例的定义,设置已确认的程序类。图7包括以下几个类:Singleton, Subject, Week,Semester,Course,CourseRegistration,Professor。图8包括ReportViewController,DetailedReportViewController,FinanciesViewController,FinanciesYearViewController,RegistrationViewController,RegistrationDetailedViewController,ProfessorsViewController,FeedbackViewController,LoginViewControllerV.用户界面 为了实现用户对系统的访问和将一些必要的数据发送到Web服务器,一启动(打开)应用程序,LoginViewController就出现了。点击登录按钮后eStudent iOS移动应用向Web服务器发送一个HTTP POST请求,通过Web服务器和API检查输入的数据。如果输入的数据时正确的,则移除LoginView,允许接下来的操作。如果在LoginView中的数据是错误的,则LoginView不发生变化,用户可以再次尝试输入数据。 苹果的iOS UI非常棒,其他IT大公司正在试图复制。一个非常实用iOS UI控件,被所有多视图(超过2-3视图)的应用程序采用,它就是是tabBar。TabBar是可以在视图间快速切换的控件,它总是可见的,而且总被放在屏幕的底部。TabBar视图控制器提供5个不同的视图控制器:ReportViewController,FinanciesViewController,ApplicationViewController ,ProfessorViewController,FeedbackViewController ReportViewController(“Izvetaj”)在第一次出现的时候,通过使用GET API请求,从eStudent Web应用获取最新数据。经过解析JSON文档(从Web eStudent获取到的),表中填写了所有的特定学生正在学习的学科。每个表单中显示着相关教学科目的名称和ID。表中每一栏都有一个箭头,这意味着用户可以点击以获取更多关于特定科目的信息(图10和图11)。这组新数据是立即显示的,因为它们将从Web eStudent已经获取的数据存入了JSON文件中。有16个部分,第一部分是总结,数据显示为整个学期的选定的教学科目,和15节其他为15周的学期的教学,并为学生每周成绩。ExamRegistrationViewController (“Prijava ispita”):点击Prijava选项后,iOS通过HTTP GET方法从服务器获取该页面需要的所有数据:1. 学生可以试图考试通过的现阶段科目列表2. 每门科目的日期和时间3. 截止日期相关信息 图12显示了一张拥有一个关于科目和它相关考试日期/时间的列表的视图。如果任何一科可以报名考试,则会有明显标记并显示相关时间日期。另外,如果学生改变了关于考试报名的注意,他可以在考试报名处更改。 FeedbackViewController (“Anketa”) :每个学期学生都必须发送一个教学满意度反馈。因为发送HTML格式的数据更实用,所以FeedbackViewController 有一个内嵌的可以创建HTML 代码的WebView ,这段HTML代码将发送到Web服务器。Feedback视图由一个有多重选择的文档填充。在这个过程中,学生可以使用位于pickerviewcontrol的导航栏上的下一个按钮,可以在反馈文档中快速操作。这一个小功能大大地加速了操作进度。 FinanciesViewController(“Finansijski Izvetaj”) :FinanciesViewController给Metropolitan大学展示了学生的财政义务,花费,债务等。不同的数据呈现在不同的栏中,达到了在较小空间的很棒的展示效果。这儿有3个部分:总和,债务和花费。通过分栏控制器,学生可以由当前的兴趣来过滤数据,既可以选择展示总和报表,也可以选择详细的债务报表或者花费报表。 ProfessorViewController 是一个简单的视图控制器。点击“Professors”栏将向Web服务器发送一个刷新数据请求。然后,一张表由若干部分组成,每个部分都是场考试,还有相关讲师和助教的信息。见图15。 每个视图控制器都是独立工作的。图16展示了eStudent iOS应用中视图控制器的层级关系。VI.API 许多移动应用程序通过与Web服务器的通信使之充满互动性和趣味性,例如Twitter,Facebook等应用通过HTTP协议与Web服务器通信。但是问题是这些应用如何与Web服务器通信?答案是通过使用应用程序编程接口(API)。 API使移动应用程序(或其他任意程序)开发者与Web服务器轻易利用API定义的函数通信。在大多数情况下,应用程序的API是面向外部世界的唯一开放点,所以在任意潜在安全风险下API的安全就显得尤为重要。图17展示了iOS eStudent移动应用,API,Web服务器以及iOS操作系统之间的联系。第 5 页 共 5 页 装订线iPhone漫画客户端摘 要现今,随着海贼王,火影忍者,死神等漫画的流行,漫画爱好者的数量越来越多。同时,随着科技的发展和人们生活水平的提高,iPhone用户也多了起来,其中就有许多漫画爱好者。本文介绍的是基于iOS操作系统下的iPhone漫画客户端的设计与实现。iPhone漫画客户端的交互设计参考了iOS7设计规范,交互简介明了,易于使用。本文先介绍了本次课题的研究背景和意义等,再介绍了移动终端的发展趋势以及ios的相关技术,包括ios简介,Objective-C的语言特点,MVC设计模式,Xcode、Instruments的使用以及一些流行的第三方类库等。随后分析了iPhone漫画客户端的需求,然后详细的描述了各个功能模块的实现。该设计采用了Objective-C语言编写,使用了MVC、单例等设计模式。通过向服务器发送请求,接收服务器反馈并解析,将结果呈现给用户。而且使用了GCD多线程编程,使得客户端在请求网络时,UI界面不卡顿,用户体验较好。实现了查看推荐漫画、分类漫画、收藏漫画、分享漫画到社交网络、阅读漫画、查看漫画评论、章节以及更换客户端主题等功能模块。满足了用户在iPhone端看漫画的需求。目前该客户端已经完成,程序界面简单明了,易于操作,软件运行效果良好,达到预期的目的。关键词:iPhone,漫画,MVC,阅读,分享ABSTRACTNowadays, with the popularity of the comics such as One Piece, Naruto and Bleach, there are more and more comics lovers. In the meantime, the number of the iPhone users is getting much larger with the development of the science and technology and the improvement of peoples living standard. Amoung these iPhone users, there are many comics lovers.This thesis is an introduction of the design and realization of the iPhone comics client which is based on iOS. The interaction design of iPhone comics client uses iOS7 design specifications, and this kind of interaction is concise and clear and easy to use. This thesis firstly introduces the researching background and significance of this topic, then introduces the development trend of mobile terminal as well as the correlation techniques of iOS, including a brief introduction of ios, the language features of Objective-C, the design pattern of MVC, the usage of Xcode and Instruments as well as some popular third party libraries. What comes next is an anaysis of the demand of iPhone comics client. At last, this thesis gives a specific description of the realization of function modules.This design uses Objective-C language compile and some design patterns such as MVC and singleton. It sends requests to the server, receives the feedback and resolves, and then presents the result to users. It also uses GCD multithread programming which makes interface smooth when the client is requesting network, so the users can experience well. Besides, this design realizes the function modules including watching the recommendations, classifications and collections of comics, introducing comics to social networks, reading comics, comments, chapters and changing client themes, which completely satisfies the users request of watching comics on iPhone. At present, this client is finished, and its interface is simple and clear and easy to operate, and the software also works well. The anticipative goal is reached in the end.KEY WORDS: iPhone,Comic,MVC,Read,Share目 录第一章 绪论51.1 课题的意义51.2 国内外发展状况51.3 本课题的研究内容、方法、手段及预期结果61.4 本文内容及章节安排6第二章 基于iOS的漫画客户端技术72.1 iOS简介72.2 Objective-C语言72.3 Xcode开发环境82.3.1 Xcode82.3.2 Instruments82.4 设计模式82.5 并发执行程序102.6 所用到的第三方类库122.7代码托管132.8本章小结13第三章 iPhone漫画客户端需求分析及架构设计153.1 需求分析153.1.1 iPhone客户端应满足的条件153.1.2 技术需求分析153.3 系统需求分析153.2 系统的结构设计163.3 总体设计17第四章 iPhone漫画客户端功能模块设计与实现194.1 首页模块设计194.2 书包模块设计214.3 分类模块设计234.4 下载模块设计244.5 详情模块设计264.6 阅读模块设计274.7 更多模块设计284.8 本章小结33第五章 测试355.1 测试的重要性355.2 测试的目的355.3 测试的步骤365.4 测试的主要内容365.5 功能测试36第六章 总结与展望37致谢38参考文献39第一章 绪论随着移动互联网和智能手机系统的发展,移动设备被应用到人们活动的各个领域,各种应用软件也相继问世。这其中有相当一部分是与娱乐密切相关的应用软件,它们不断地改变着人们的生活方式,而这也满足了人们对各种信息的需求。一款好的应用软件成为手机必备。本设计主要基于iOS平台实现了iPhone客户端阅读漫画的功能,通过此款应用可以查看当前最新、最火的漫画,以及他们的简介、评论、评分等等。本设计采用了Xcode开发工具,它具有可视化的编程界面、详细的提示以及完善的帮助文档,软件开发人员使用起来非常方便。本设计首先概要性地介绍了本文使用的关键技术、MVC模式等等;然后分析了iPhone漫画客户端的需求以及整体的架构设计;其次用图表加文字的方式对详细的模块的设计与实现过程做了详尽的阐述,并对关键技术的实现,进行了代码解析;最后还分析了开发工程中所做的单元测试。1.1 课题的意义漫画是以图片加上简单的文字传达出比单一文字更让人身临其境更好的感受故事的情节的艺术作品,通常以书籍的形式出现,让漫画爱好者观看。相对于下载漫画,在线漫画更注重“在线”二字,也就是说,一般在线漫画指在线观看漫画,而不是下载到本地电脑后观看。如果下载到本地观看,一般只能使用漫画下载器。而iPhone漫画客户端可以把传统的纸质阅读更加精彩的展现在手机屏幕上。添加翻页动画特效到漫画播放过程中,让故事从漫画书中跳跃出来,立体地呈现在用户面前。这样看漫画更加生动,更加触动人心,让漫画在人们的掌中宾彩纷呈。1.2 国内外发展状况手机与互联网的融合形成的移动互联网业务是与传统互联网以及传统移动通信业务完全不同的新型业务,移动互联网催生的新型需求日益成为传统IT与通信巨头的蓝海。随着社会的不断发展,各种各样的手机软件参与了人类的活动和社会活动,因此改善人和人之间的关系,使人对人的交流更为广泛。还可以促进大脑智力的发展,让人们的思维更活跃。现今,人类己进入了信息化网络3G时代,手机的应用范围越来越广泛。iOS最初是设计在iPhone上的操作系统,苹果公司于2007年1月9日的WWDC大会上公布了这个系统,并命名为iPhone OS,但随着此系统在iPod touch、iPad以及Apple TV等苹果产品上的广泛应用,苹果公司于2010年6月7日WWDC大会上将其改名为iOS。目前苹果的iPhone已经取得很大成功,其推出的软件商店模式也使得开发者大量参与进来,极大丰富了iPhone的功能,也使开发者有了致富机会,而在中国,移动、电信、联通纷纷推出自己的应用程序商店,并不只为效仿苹果App Store的商业模式,更多的是看到丰富的应用程序在未来将成为用户选择运营商和手机平台的决定因素;而对于开发者来说,手机软件商店开发者分成模式将成为他们的另一个金矿。同时iPhone最大的问题,这是一个封闭的系统,代码的不开源,从操作系统到开发语言的独具一帜,这注定了开发人员不多,相对于其他操作平台开发人员渐现后劲不足。1.3 本课题的研究内容、方法、手段及预期结果研究内容:本课题深入分析了iPhone漫画客户端的背景及意义、iPhone应用的现状和发展趋势。在前人的研究基础上对iPhone在线漫画客户端进行了重构和设计。该客户端通过服务器接口调取数据并解析出来,实现了各个首页的展示,实现对漫画简介、章节、评分、评论以及分享等等功能。详细功能的设计和实现。研究方法:安装iOS开发环境,查阅相关开发资料,然后着手开发,最后优化程序。研究手段:通过查阅最新官方文档及一些论坛上的教程,结合自己的开发经验,开发iPhone漫画客户端,实现各项功能。研究成果:实现iPhone漫画客户端的在线阅读功能,本地收藏,下载等功能。1.4 本文内容及章节安排本文的具体内容安排如下:第一章是绪论,首先说明了本课题的研究目的与意义,然后综合论述了iOS应用研发现状,基于此,最后介绍了本论文要阐述的内容及论文结构。第二章对基于iOS的漫画客户端技术进行概述,并简单介绍了iOS,Objective-C,Xcode开发环境,常用的设计模式和该项目所用到的第三方类库等等。第三章详细分析了iPhone漫画客户端需求分析以及它的架构设计。第四章详细分析了iPhone漫画客户端的各个功能模块和他们的实现,包括首页模块,书包模块,分类模块,下载模块、详情模块、阅读模块和更多模块。第五章简单总结了iPhone漫画客户端开发过程中用到的测试。第六章总结了本文所做的工作,对其不足进行了分析,并对基于iOS的漫画客户端未来发展进行了展望。最后总结了在毕业设计过程中参考的文献以及致谢。第二章 基于iOS的漫画客户端技术2.1 iOS简介iOS是由苹果公司开发的手持设备操作系统。苹果公司最早于2007年1月9日的Macworld大会上公布这个系统,最初是设计给iPhone使用的,后来陆续套用到iPod touch、iPad以及Apple TV等苹果产品上。iOS与苹果的Mac OS X操作系统一样,它也是以Darwin为基础的,因此同样属于类Unix的商业操作系统。原本这个系统名为iPhone OS,直到2010年6月7日WWDC大会上宣布改名为iOS。系统结构:iOS的系统结构分为四个层次:核心操作系统(the Core OS layer),核心服务层(the Core Services layer),媒体层(the Media layer),可轻触层(the Cocoa Touch layer)。最新版的iOS系统(iOS5)中,系统操作占用大概774.4MB的内存空间。发展历史:iOS最早于2007年1月9日的苹果Macworld展览会上公布,随后于同年的6月发布的第一版iOS操作系统,当初的名称为“iPhone runs OS X”。最初,由于没有人了解“iPhone runs OS X”的潜在价值和发展前景,导致没有一家软件公司、没有一个软件开发者给“iPhone runs OS X”开发软件或者提供软件支持。于是,苹果公司时任CEO斯蒂夫.乔布斯说服各大软件公司以及开发者可以先搭建低成本的网络应用程序(WEB APP)来使得它们能像iPhone的本地化程序一样来测试“iPhone runs OS X”平台。2007年10月17日,苹果公司发布了第一个本地化IPhone应用程序开发包(SDK),并且计划在2月发送到每个开发者以及开发商手中;2008年3月6日,苹果发布了第一个测试版开发包,并且将“iPhone runs OS X”改名为”iPhone OS“;2008年9月,苹果公司将iPod touch的系统也换成了”iPhone OS“;2010年2月27日,苹果公司发布iPad,iPad同样搭载了”iPhone OS”。这年,苹果公司重新设计了“iPhone OS”的系统结构和自带程序;2010年6月,苹果公司将“iPhone OS”改名为“iOS”,同时还获得了思科iOS的名称授权;2010年第四季度,苹果公司的iOS占据了全球智能手机操作系统26%的市场份额;2011年10月4日,苹果公司宣布iOS平台的应用程序已经突破50万个。2.2 Objective-C语言Objective-C,通常写作ObjC和较少用的Objective C或Obj-C,是扩充C的面向对象编程语言。它主要使用于Mac OS X和GNUstep这两个使用OpenStep标准的系统,而在NeXTSTEP和OpenStep中它更是基本语言。Objective-C可以在gcc运作的系统写和编译,因为gcc含Objective-C的编译器。1980年代初布莱德确斯(Brad Cox)在其公司Stepstone发明Objective-C。他对软件设计和编程里的真实可用度问题十分关心。Objective-C用途:编写iOS操作系统(如:iPhone、iPod touch、iPad 等苹果移动终端设备 )应用程序的利器。Objective-C的流行当归功于iPhone的成功,因为Objective-C一直被用于编写iPhone应用程序。Objective-C是ANSI C的超集,扩展了C语言使它具备面向对象设计的能力,如类、消息和继承。Objective-C程序中可以利用现有的C语言代码,使其利用现有的软件架构。这也是为什么Objective-C过去多年间能够成为一种流行的用户界面开发语言而且至今没有消亡,因为一方面用它可以实现底层系统编程,另一方面可以利用动态构架进行开发。2.3 Xcode开发环境2.3.1 XcodeXcode是苹果公司向开发人员提供的集成开发环境(非开源),用于开发Mac OS X,iOS的应用程序。其运行于苹果公司的Mac操作系统下。不管你用C、C+、Objective-C或Java编写程序,在AppleScript里编写脚本,还是试图从另一个奇妙的工具中转移编码,你会发现 Xcode 编译速度极快。每次操作都很快速和轻松。苹果公司为用户提供了全套免费的Cocoa程序开发工具(Xcode)。Mac OS X一起发行,在苹果公司官方的网站下载。2.3.2 InstrumentsInstruments是一个动态跟踪和分析的MacOS X和iOS代码的应用程序。它是一个灵活和强大的工具,让您跟踪一个或多个进程,并检查所收集的数据。这样,Instruments帮助您了解用户程序和操作系统的行为。 有了Instruments应用程序,您可以使用特殊的工具(如Instruments)来跟踪一个过程中的行为不同方面。您还可以使用该应用程序,记录的用户界面操作的顺序和重放它们,使用一个或多个工具收集数据。使用Instruments,我们可以:追查难以重现的代码中的问题;程序性能分析;自动化测试代码;应用程序的压力测试部分;执行一般的系统级故障诊断;获得更深入的了解你的代码是如何工作的。2.4 设计模式不管创建iOS的哪种类型的应用程序,有几个基本的设计模式和技术在写代码前我们必须知道。在iOS系统框架为应用程序提供了最重要的基础设施,在大多数情况下,只能通过系统框架来调用底层的硬件。反过来,框架也使用了很多特别的设计模式,开发应用程序前,我们通常假设都是很熟悉这些设计模式的。要知道系统怎么支持应用程序的,那就得先理解这些设计模式,这非常重要。(1)MVC模式:MVC即是Model-VIew-Controller三个英文单词的缩写,中文翻译为模型视图控制器。MVC并非只有ios应用软件独有的应用开发模式,它被广泛应用在许多软件(尤其是中大型软件)的开发上。MVC把软件系统分为三个部分:Model,View,Controller。Model相当于应用的底层,应用在功能上的实现完全依赖于Model,打个比方,如果是一台电脑的话,Model就是你机箱里的所有东西:cpu,内存,硬盘,显卡等的一个集合,你不必看到它们,但它们必不可少;Controller就是控制器,它控制Model与View的交互,它将M和V捆绑在一起,将你的操作传达给Model,再控制View将其表现出来。View相当于电脑的图形界面,将Model的运行结果可视化地呈现给用户,你在屏幕上看到的一切都可以归类于View。在cocoa中,你的程序中的每一个object(对象)都将明显地仅属于这三部分中的一个,而完全不属于另外两个。因此,用MVC开发的应用软件更易于进行维护和修改,不用因为底层的Model出了问题而去影响表层的View。MVC虽然把三部分独立了出来,但三部分之间仍然存在联系,但就如下图所示,Model与View之间是完全独立的,两者各自运行,以Controller为桥梁进行交互,并不发生直接关联。MVC的低耦合性、高重用性、可维护性等优点显而易见,使得原本复杂的代码与界面的交互变得简单、清晰、明了,开发者可以把更多的精力放在前端界面的设计上,而不用绞尽脑汁去思考究竟应该如何使界面得到同步,这样减轻了设计压力,也从另一方面使用户得到更多更好的享受体验。纵观ios经典Native App的所有应用软件,几乎都具有一个很大特点,那就是“炫”。清新的画面配以简单的手势操作,颠覆着用户的思维方式,小巧精悍。在最初的JSP网页中,像数据库查询语句这样的数据层代码和像HTML这样的表示层代码混在一起。经验比较丰富的开发者会将数据从表示层分离开来,但这通常不是很容易做到的,它需要精心地计划和不断的尝试。MVC从根本上强制性地将它们分开。尽管构造MVC应用程序需要一些额外的工作,但是它带给我们的好处是毋庸置疑的。多个视图能共享一个模型。如今,同一个Web应用程序会提供多种用户界面,例如用户希望既能够通过浏览器来收发电子邮件,还希望通过手机来访问电子邮箱,这就要求Web网站同时能提供Internet界面和WAP界面。控制器连接不同的模型和视图去完成用户的需求,也可以构造应用程序提供强有力的手段。给定一些可重用的模型和视图,控制器可以根据用户的需求选择适当的模型机型处理,然后选择适当的视图将处理结果显示给用户。在MVC设计模式中,模型响应用户请求并返回响应数据,视图负责格式化数据并把它们呈现给用户,业务逻辑和表示层分离,同一个模型可以被不同的视图重用,所以大大提高了代码的可重用性。过去MVC模式并不适合小型甚至中等规模的应用程序,这样会带来额外的工作量,增加应用的复杂性。但现在多数软件设计框架,能直接快速提供MVC骨架,供中小型应用程序开发,此问题不再存在。对于开发存在大量用户界面,并且逻辑复杂的大型应用程序,MVC将会使软件在健壮性、代码重用和结构方面上一个新的台阶。尽管在最初构建MVC模式框架时会花费一定的工作量,但从长远的角度来看,它会大大提高后期软件开发的效率。好的应用需要有好的体验,MVC模式正式为了提升用户体验而诞生的一种软件开发模式,虽然分离出M、V、C需要巧妙的构思以及完成更多的工作,但它更有利于软件的工程化管理,不同的层各司其职,使得软件的维护以及日后的升级更加从容与方便。在飞速发展的电子领域,技术的进步如白驹过隙,MVC要想获得巩固的地位,只要能更好地解决层与层之间的分离工作,不只是移动终端,MVC模式肯定将是日后软件开发的主流。(2)代理模式:这个设计模式有助于一个对象的数据传输到另一个对象:委托模式可以对复杂对象进行修改而不需要子类化。与子类化不同的是,您可以照常使用复杂对象,而将对其行为进行修改的定制代码放在另一个对象中,这个对象就称为委托对象。复杂对象需要在预先定义好的时点上调用委托对象的方法,使其有机会运行定制代码。(3)目标-操作:这个设计模式用按钮,等控件把用户的交互变成代码,让程序可以执行:控件通过目标-动作模式将用户的交互通知给您的应用程序。当用户以预先定义好的方式(比如轻点一个按键)进行交互时,控件就会将消息(动作)发送给您指定的对象(目标)。接收到动作消息后,目标对象就会以恰当的方式进行响应(比如在按动按键时更新应用程序的状态)。(4)单例模式:确保程序运行期某个类,只有一份实例,用于进行资源共享控制。它使用简单,延时求值,易于跨模块。(5)键值观察:值更改时通知观察者 键值观察(Key-value observing,或简称 KVO)允许对象观察另一个对象的属性。该属性值改变时,会通知观察对象。它了解新值以及旧值;如果观察的属性为对多的关系(例如数组),它也要了解哪个包含的对象发生了改变。KVO 有助于使应用程序变得更内聚,保持模型、控制器和视图层中的对象与改变同步。2.5 并发执行程序iOS和Mac OS传统的并发编程模型是线程,不过线程模型伸缩性不强,而且编写正确的线程代码也不容易。Mac OS 和iOS采取asynchronous design approach 来解决并发的问题。引入的异步技术有两个:(1)Grand Central Dispatch:系统管理线程,你不需要编写线程代码。只需定义想要执行的任务,然后添加到适当的dispatch queue。Grand Central Dispatch会负责创建线程和调度你的任务。系统直接提供线程管理,比应用实现更加高效。(2)Operation Queue:Objective-C对象,类似于dispatch queue。你定义想要执行的任务,并添加任务到operation queue,后者负责调度和执行这些任务。和Grand Central Dispatch一样,Operation Queue也管理了线程,更加高效。当两个或两个以上的任务同时执行时就发生了并发。即使只有一个CPU,现代操作系统也能够在同时执行多个任务。要实现这一点,它们需要给每个任务从 CPU 中分配一定的时间片。例如,要在1秒钟内执行10个同样优先级的任务,操作系统会用10(任务)来平均分配1000毫秒(每秒钟有 1000 毫秒),那么每个任务就会有100毫秒的CPU时间。这就意味着所以的任务会在同一秒钟内执行,也就是并发执行。然而,随着技术进步,现在我们的 CPU 有不止一个内核。这就意味着 CPU 真正具备了同时执行多个任务的能力。操作系统将任务分配到 CPU 并等到任务执行完成。就是这么简单!Grand Central Dispatch,或者简称GCD,是一个与Block Object一起工作的底层C API。GCD真正的用途是将任务分配到多个核心又不让程序员担心哪个内核执行哪个任务。在 Max OS X 上,多内核设备,包括笔记本,用户已经使用了相当长的时间。通过多核设备比如iPad2的介绍,程序员能为iOS写出神奇的多核多线程APP。GCD的核心是分派队列。不论在iOS还是Max OS X分派队列,正如我们快看到的是由位于主操作系统的GCD来管理的线程池。你不会直接与线程有工作关系。你只在分派队列上工作,将任务分派到这个队列上并要求队列来调用你的任务。GCD 为运行任务提供了几个选择:同步执行、异步执行和延迟执行等。要在你的APP开始使用GCD,你没有必要将任何特殊库导入你的项目。Apple已经在GCD中纳入了各种框架,包括 Core Foundation 和 Cocoa/Cocoa Touch。GCD中的所有方法和数据类型都以dispatch_关键词开头。例如,dispatch_async允许你在一个队列上分派任务来异步执行,而dispatch_after允许你在一个给定的延迟之后运行一个block。dispatch queue分成以下三种:(1)运行在主线程的Main queue,通过dispatch_get_main_queue获取。(2)并行队列global dispatch queue,通过dispatch_get_global_queue获取,由系统创建三个不同优先级的dispatch queue。并行队列的执行顺序与其加入队列的顺序相同。(3)串行队列serial queues一般用于按顺序同步访问,可创建任意数量的串行队列,各个串行队列之间是并发的。当想要任务按照某一个特定的顺序执行时,串行队列是很有用的。串行队列在同一个时间只执行一个任务。我们可以使用串行队列代替锁去保护共享的数据。和锁不同,一个串行队列可以保证任务在一个可预知的顺序下执行。serial queues通过dispatch_queue_create创建,可以使用函数dispatch_retain和dispatch_release去增加或者减少引用计数。GCD的用法:/ 后台执行: dispatch_async(dispatch_get_global_queue(0, 0), / something ); / 主线程执行: dispatch_async(dispatch_get_main_queue(), / something ); / 一次性执行: static dispatch_once_t onceToken; dispatch_once(&onceToken, /只执行一次的代码 ); / 延迟2秒执行: double delayInSeconds = 2.0; dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, delayInSeconds * NSEC_PER_SEC); dispatch_after(popTime, dispatch_get_main_queue(), (void) / 在主线程上延迟执行的代码 ); / 自定义dispatch_queue_t dispatch_queue_t urls_queue = dispatch_queue_create(, NULL); dispatch_async(urls_queue, /你的代码 ); dispatch_release(urls_queue); / 合并汇总结果 dispatch_group_t group = dispatch_group_create(); dispatch_group_async(group, dispatch_get_global_queue(0,0), / 并行执行的线程一 ); dispatch_group_async(group, dispatch_get_global_queue(0,0), / 并行执行的线程二 ); dispatch_group_notify(group, dispatch_get_global_queue(0,0), / 汇总结果 );GCD的另一个用处是可以让程序在后台较长久的运行。在没有使用GCD时,当app被按home键退出后,app仅有最多5秒钟的时候做一些保存或清理资源的工作。但是在使用GCD后,app最多有10分钟的时间在后台长久运行。这个时间可以用来做清理本地缓存,发送统计数据等工作。2.6 所用到的第三方类库(1)ASIHTTPRequest使用iOS SDK中的HTTP网络请求API,相当的复杂,调用很繁琐,ASIHTTPRequest就是一个对CFNetwork API进行了封装,并且使用起来非常简单的一套API,用Objective-C编写,可以很好的应用在Mac OS X系统和iOS平台的应用程序中。ASIHTTPRequest适用于基本的HTTP请求,和基于REST的服务之间的交互。ASIHTTPRequest功能很强大,主要特色如下:通过简单的接口,即可完成向服务端提交数据和从服务端获取数据的工作;下载的数据,可存储到内存中或直接存储到磁盘中;能上传本地文件到服务端;可以方便的访问和操作请求和返回的Http头信息;可以获取到上传或下载的进度信息,为应用程序提供更好的体验;支持上传或下载队列,并且可获取队列的进度信息;支持基本、摘要和NTLM身份认证,在同一会话中授权凭证会自动维持,并且可以存储在Keychain(Mac和iOS操作系统的密码管理系统)中;支持Cookie;当应用(iOS 4+)在后台运行时,请求可以继续运行;支持GZIP压缩数据;内置的ASIDownloadCache类,可以缓存请求返回的数据,这样即使没有网络也可以返回已经缓存的数据结果;ASIWebPageRequest 可以下载完整的网页,包括包含的网页、样式表、脚本等资源文件,并显示在UIWebView /WebView中。任意大小的页面都可以无限期缓存,这样即使没有网络也可以离线浏览;支持客户端证书;支持通过代理发起Http请求;支持带宽限制。在iOS平台,可以根据当前网络情况来自动决定是否限制带宽,例如当使用WWAN(GPRS/Edge/3G)网络时限制,而当使用WIFI时不做任何限制;支持断点续传;支持同步和异步请求。(2)FMDB FMDB是个Sqlite的Objective-C封装库。ARC(自动引用计数)和MRC(手动管理内存)两种环境下都可以,FMDB会在编译的时候知道你是用的哪一种,然后进行相应处理。FMDB有三个主要的类FMDatabase:表示一个单独的SQLite数据库。 用来执行SQLite的命令。FMResultSet:表示FMDatabase执行查询后结果集FMDatabaseQueue:如果你想在多线程中执行多个查询或更新,你应该使用该类。这是线程安全的。(3)SDWebImage 是UIImageView的一个Category。它的主要功能有:为UIImageView加载网络图片,为Cocoa Touch框架提供缓存管理;异步图片下载;异步内存+磁盘图片缓存,自动缓存过期处理;确保同一个url不会被加载很多次;确保同一个url不会被加载很多次。(4)MBProgressHUDMBProgressBar是一个开源项目,实现了很多种样式的提示框,使用上简单、方便,并且可以对显示的内容进行自定义,功能很强大,很多项目中都有使用到。到GitHub上可以下载到项目源码/jdg/MBProgressHUD,下载下来后直接把MBProgressHUD.h和MBProgressHUD.m拖入工程中就行,别忘了选择拷贝到工程。完了在需要使用的地方导入头文件就可以开始使用了。(5)GDataXMLNodeGDataXMLNode基于Tree-based API,这种API的处理方式是将XML的结构看成是树,然后把树的各部分看成一个对象来处理,这就是我们说的DOM (Document Object Model)方式 。在iPhone的SDK里包含了一个libxml2的框架(Framework)就能进行DOM解析方式 。Google的GDataXML也是基于libxml2的,因此在使用GDataXML之前,你需要先导入libxml2。2.7代码托管Git 是一个快速、可扩展的分布式版本控制系统,它具有极为丰富的命令集,对内部系统提供了高级操作和完全访问。Git诞生于2005年,起因是因为Linux内核开源项目使用的版本控制系统BitKeeper被收回,这就迫使Linux开源社区(特别是Linux的缔造者Linus Torvalds)不得不吸取教训,只有开发一套属于自己的版本控制系统才不至于重蹈覆辙。他们对新系统制定的目标如下:速度快,设计简单,对非线性开发模式的强力支持(允许上千个并行开发的分支),完全分布式,有能力高效管理类似Linux内核一样的超大规模项目(速度和数量)。经过不断的完善,Git始终保持着如下的特点:(1)直接记录快照,而非差异比较。Git和其他版本控制系统的主要差别在于,Git只关心文件数据的整体是否发生变化,而大多数其他系统则只关心文件内容的具体差异。这类系统(CVS、Subversion等)每次记录都有哪些文件做了更新,以及更新了哪些行的什么内容。Git 并不保存这些前后变化的差异数据。实际上,Git 更像是把变化的文件作快照后,记录在一个微型的文件系统中。每次提交更新时,它会纵览一遍所有文件的指纹信息并对文件作一快照,然后保存一个指向这次快照 的索引。为提高性能,若文件没有变化,Git 不会再次保存,而只对上次保存的快照作一链接。这是 Git 同其他系统的重要区别。它完全颠覆了传统版本控制的套路,并对各个环节的实现方式作了新的设计。Git 更像是个小型的文件系统,但它同时还提供了许多以此为基础的超强工具,而不只是一个简单的 VCS。(2)支持离线工作(近乎所有操作都是本地执行),本地提交可以稍后提交到服务器上;(3)时刻保持数据完整性;(4)多数操作仅添加数据;基本的 Git 工作流程如下:(1) 在工作目录中修改某些文件。 (2) 对修改后的文件进行快照,然后保存到暂存区域。 (3)提交更新,将保存在暂存区域的文件快照永久转储到 Git 目录中。2.8本章小结本章主要是介绍了iOS和Objective-C,深入研究了开发工具Xcode以及调试工具Instruments,然后介绍了iOS开发中所需的设计模式和使用GCD并发执行程序以及iPhone漫画客户端用到的一些第三方类库还有所用到的代码托管。第三章 iPhone漫画客户端需求分析及架构设计3.1 需求分析漫画是以图片加上简单的文字传达出比单一文字更让人身临其境更好的感受故事的情节的艺术作品,通常以书籍的形式出现,让漫画爱好者观看。近年来iPhone的用户量不断增大,漫画爱好者数量也在增多,他们希望在移动端随时随地地看漫画,不受时间和地点的限制。用户们已经不仅仅满足于通过浏览器来联网观看漫画,因为这样很可能在断网的情况下就无法阅读漫画了。而iPhone漫画客户端就是为了满足漫画爱好者的这些需求而产生的。3.1.1 iPhone客户端应满足的条件作为一个漫画客户端,需要满足的基本特点,如:把用户请求转换成服务器能够理解和处理的格式;像服务器传送用户请求,同时接收服务器响应;解析来自服务器的响应,并将其展示给用户等等。3.1.2 技术需求分析系统设计遵循实用、先进、标准、可扩充性、可靠性和稳定性原则,保证系统的可实施性。1. 硬件需求:(1) 开发工具硬件需求:处理器:2.5 GHz Intel Core i5;内存:4 GB 1600 MHz DDR3;硬盘:500 GB硬盘空间;其他:鼠标、键盘;(2) 软件运行硬件需求:设备:iPhone 5s;处理器:A7处理器;内存:16 GB;2. 软件需求:(1) 客户端软件需求:操作系统:OS X 10.9.3;运行环境:iOS SDK 7.1;(2) 软件运行环境软件需求:操作系统:iOS 7.1.1;运行环境:iOS SDK 7.1;系统设计时所选用的软硬件产品等必须是主流的,具有先进性的,易升级扩展的产品,而且开发具有标准、规范性、易维护等特点。3.3 系统需求分析在系统分析的过程中,我们通常用用例(Use Case)来描述系统需求。一般来说,用例是各种系统受益人之间的一种行为契约,行为包括对象的活动、动作和对象之间的交互等。建立契约的目的是为了达成某种目标,因此每一个用例其实实际上应该都能代表一个用户目标,根据目标的三个目标层次(概要层,用户目标层,子功能层)将用例进行分层,从而有效把握用例的粒度。用例是对系统需求,主要是功能需求的规范化的描述,用例模型是面向对象分析的关键性输入。用例图和用例的事件流描述集中体现了系统责任。根据系统分析的流程及软件工程的知识,我们利用UML工具制作了该系统的用例图。该用例图从整体上说明了该系统的主要功能,并列举了用例和用户角色的关系。这幅图也描述了用户通过本系统进行漫画收藏、阅读、下载等工作。如图3.1。图3.13.2 系统的结构设计B/S(Browser/Server,浏览器/服务器)结构,是WEB兴起后的一种网络结构模式,WEB浏览器是客户端最主要的应用软件。这种模式统一了客户端,将系统功能实现的核心部分集中到服务器上,简化了系统的开发、维护和使 用。客户机上只要安装一个浏览器(Browser),如Netscape Navigator或Internet Explorer,服务器安装Oracle、Sybase、Informix或 SQL Server等数据库。浏览器通过Web Server同数据库进行数据交互。C/S (Client/Server,客户端/服务器)结构,即客户机和服务器结构。它是软件系统体系结构,通过它可以充分利用两端硬件环境的优势,将任务合理分配到 Client端和Server端来实现,降低了系统的通讯开销。目前大多数应用软件系统都是Client/Server形式的两层结构,由于现在的软件应 用系统正在向分布式的Web应用发展,Web和Client/Server 应用都可以进行同样的业务处理,应用不同的模块共享逻辑组件;因此,内部的和外部的用户都可以访问新的和现有的应用系统,通过现有应用系统中的逻辑可以扩展出新的应用系统。这也就是目前应用系统的发展方向。 CS体 系结构采用的是开放模式,这是系统开发一级的开放性,在特定的应用中无论是Client端还是Server端都还需要特定的软件支持,开发较B/S模式大,本毕业设计所开发的基于IPhone的销售辅助系统采用的是C/S结构。3.2 系统的结构设计.B/S(Browser/Server,浏览器/服务器)结构,是WEB兴起后的一种网络结构模式,WEB浏览器是客户端最主要的应用软件。这种模式统一了客户端,将系统功能实现的核心部分集中到服务器上,简化了系统的开发、维护和使 用。客户机上只要安装一个浏览器(Browser),如Netscape Navigator或Internet Explorer,服务器安装Oracle、Sybase、Informix或 SQL Server等数据库。浏览器通过Web Server同数据库进行数据交互。C/S (Client/Server,客户端/服务器)结构,即客户机和服务器结构。它是软件系统体系结构,通过它可以充分利用两端硬件环境的优势,将任务合理分配到 Client端和Server端来实现,降低了系统的通讯开销。目前大多数应用软件系统都是Client/Server形式的两层结构,由于现在的软件应 用系统正在向分布式的Web应用发展,Web和Client/Server 应用都可以进行同样的业务处理,应用不同的模块共享逻辑组件;因此,内部的和外部的用户都可以访问新的和现有的应用系统,通过现有应用系统中的逻辑可以扩展出新的应用系统。这也就是目前应用系统的发展方向。 CS体 系结构采用的是开放模式,这是系统开发一级的开放性,在特定的应用中无论是Client端还是Server端都还需要特定的软件支持,开发较B/S模式大,本毕业设计所开发的基于IPhone的销售辅助系统采用的是C/S结构。3.3 总体设计系统设计是信息系统开发过程中重要阶段。在这一阶段中,要根据前一阶段系统分析的结果,在已经获得的需求分析基础上,进行系统设计。系统设计包括两个方面,首先是总体结构的设计,其次是具体物理模型的设计。系统设计的主要目的就是为下一阶段的系统实现(如编程、调试、试运行等)制定蓝图。系统设计阶段主要任务就是在各种技术和实施方法中权衡利弊,精心设计,合理地使用各种资源,最终勾划出新系统的详细设计方案。按功能分成首页、书包、分类、下载、更多等七大模块。如表3.1所示:模块简述功能描述首页首页上面部分显示5部推荐漫画,下面部分则显示根据排行的漫画,用户可以选择观看自己喜欢的漫画书包展示了用户收藏的漫画。用户可以在漫画详情页面点击收藏按钮,将漫画收藏到书包。分类用户可以根据自己的喜好,选择不同的分类,可以帮助用户迅速快捷地找到自己喜欢的漫画下载用户可以在详情页面点击下载按钮下载漫画,并且要显示每部漫画的下载进度。详情显示漫画详情。包括漫画的书名、作者和类别,还有漫画简介、章节以及评价。还有分享、收藏、下载等功能按钮。用户可以将正在阅读的漫画通过微信好友、朋友圈和易信好友、朋友圈分享到自己的社交圈子。也可以完成收藏、下载等操作。阅读主要呈现漫画内容,可以上、下翻页或跳页,阅读漫画。更多主要包括了主题设置、意见反馈、联系我们、关于等内容。表3.1第四章 iPhone漫画客户端功能模块设计与实现根据需求分析,iPhone漫画客户端划分了七大模块。除了这七大模块外,还有一些基础模块,它们是这七大子模块的载体或基础。比较重要的有以下几个:(1)iPhone漫画客户端的根视图控制器是一个UITabBarController;UITabBarController是iOS开发 中常用的一个视图控制器,通常作为整个应用的根视图控制器,而且不能添加到别的视图控制器上。在此次毕业设计中,我们使用了自定义的UITabBar,因为根据我们的需求,系统自带的UITabBar显然已经无法满足了。(2)网络连接检查模块,开发网络应用程序时候,我们需要确认网络环境,连接环境等情况。具体代码如下所示:if (Reachability reachabilityForInternetConnection.currentReachabilityStatus = NotReachable) UIAlertView *alertView = UIAlertView alloc initWithTitle:提示 message:请检查网络连接 delegate:nil cancelButtonTitle:确定 otherButtonTitles:nil; alertView show; 在Reachability类中,网络状态共有三种:NotReachable、ReachableViaWiFi、ReachableViaWWAN,即无连接、使用WiFi网络、使用3G/GPRS网络。因为漫画客户端不同于在线流媒体播放软件,无需区分开当前用户是使用WiFi网络还是3G或GPRS网络,故我们仅需判断网络是否连接即可。(3)数据解析模块,因为在该系统中,服务器返回的数据绝大多数都是XML格式的,所以着重介绍数据的解析。本次毕业设计中,我们主要采用了GDataXMLNode来解析。第一步,使用NSData对象初始化;接着获取根节点;然后获取根节点下的节点,这步通常都是先根据根节点解析出一个节点数组,然后通过forin快速遍历出数组中的节点,然后接着根据节点解析出数组,然后取出节点,并获取节点的值。iPhone漫画客户端的各个子模块具体设计与实现如下:4.1 首页模块设计下图4.1为首页界面,上面是一个UIScrollView,可以滑动显示5部漫画的封面图片。紧接着下面则是一个UITableView,显示了漫画排行。其中的cell则是自定制的,因为系统的cell无法满足图示需求。首先在声明文件中遵循UITableViewDataSource,UITableViewDelegate,UIScrollViewDelegate等协议,然后再在实现文件中实现UITableViewDataSource,UITableViewDelegate,UIScrollViewDelegate的相应方法。这些协议方法主要用来完成UI界面的更新。图4.1其次,我们在Model中实现了首页数据的请求方法parseHomeData和数据解析方法parseXMLDataToGetArray,然后在首页中调用Model中关于首页的方法。这样,数据处理就和界面展示部分分离开来,很符合MVC设计模式。数据在Model与首页视图控制器的传递方面,我们则采用了Notification(通知)。通知中心实际上是在程序内部提供了消息广播的一种机制。通知中心不能在进程间进行通信。实际上就是一个二传手,把接收到的消息,根据内部的一个消息转发表,来将消息转发给需要的对象。通知中心是基于观察者模式的,它允许注册、删除观察者。一个NSNotificationCenter可以有许多的通知消息NSNotification,对于每一个NSNotification可以有很多的观察者Observer来接收通知。通知中心两个重要的类:NSNotificationCenter:这是iOS中通知中心的灵魂,由该类实现了观察者模式,并给开发者提供了诸如注册、删除观察者的接口,我们可以通过一个单例来获得它的实例(注,一个程序内部只有一个NSNotificationCenter实例对象);NSNotification:这是消息携带的载体,通过它,可以把消息内容传递给观察者。其中:name对应消息名称标示。object一般是发送者本身、dictionary则是传递的消息内容。由于我们这个项目采用了ARC,所以我们只需实现通知的注册和发布,移除则交由系统来完成。通知中心的注册:应用程序的其他地方的对象如果需要知道某个事件,则需向通知中心注册,让通知中心知道它们希望在某件事情发生的时候得到通知;注册方法:NSNotificationCenter defaultCenter addObserver:self selector:selector(回调方法) name:”通知名” object:nil;通知的发布:当对象发布通知的时候,这个通知会被转到通知中心。此时的通知中心就像一个信息交换机构以及通知广播中心。发布方法:NSNotificationCenter defaultCenter postNotificationName:”通知名” object:self;通知中心的使用如图4.2所示:图4.24.2 书包模块设计在该模块中,界面展示方面仍然是使用了UITableView控件,通过实现它的代理方法,将数据填充到bookBagTableView。具体界面如图4.3所示:图4.3我们在初始化的时候查询本地数据库,得先取出数据库中的数据,然后根据数据来设置界面。初始化数据时,我们首先执行FMDB的实例方法open,来判断数据库是否成功打开;若该方法返回值为YES的话,那么接着判断该库中bookBagTable表是否存在,若不存在,则执行Sqlite语句CREATE TABLE bookBagTable(name text, authorname text, category text,eimg blob, id text, info text, read_url text)来创建该表。若表存在且有数据,则从中导出数据,存放到bookBagTableView的数据源bookBagArray中。在书包视图控制器中,实现了tableView:commitEditingStyle:forRowAtIndexPath:方法,所以它支持向左单指滑动,实现删除cell的功能。需要注意的是,我们在UI中删除了收藏的漫画,那么也就需要在数据库中删除相应的数据,否则下次加载该界面时, bookBagTableView中的收藏的漫画仍然是未删除的。具体代码如下:- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath /删除数据 NSString *idstr = self.bookBagArray objectAtIndex:indexPath.row objectForKey:id; if (self.bookBagDatabase executeUpdate:DELETE FROM bookBagTable WHERE id = ?,idstr) NSLog(删除成功); self.bookBagArray removeObjectAtIndex:indexPath.row; /更新UI self.bookBagTableView deleteRowsAtIndexPaths:NSArray arrayWithObject:indexPath withRowAnimation:UITableViewRowAnimationFade;4.3 分类模块设计首先,在“漫画分类”标题的右边有个按钮,点击后会弹出SIMenuTable类型的分类视图,在分类视图展开的情况下再次点击按钮,分类视图会隐藏起来。如图4.4所示。点击具体的分类条目,下面的tableView则会显示出该分类下的所有的漫画。如图4.5所示:图4.4图4.5在该模块中,主要也是通过不同类别,在Model中请求相应类别的数据,解析之后通过通知传递给分类视图控制器,然后在分类列表中显示出来。4.4 下载模块设计下载视图控制器中主要的控件也是一个UITableView,所以主要的UI层面的也是UITableView的DataSource和Delegate实现方法。下载视图控制器的界面如图4.6所示:图4.6界面的核心部分则是自定义的cell,而实现文件中,核心部分则是下载功能的实现。首先初始化Documents路径, NSHomeDirectory() stringByAppendingPathComponent:Documents;然后初始化临时文件路径,并通过NSFileManager的类方法defaultManager,创建文件管理器;接着判断temp文件夹是否存在,如果不存在需要创建,因为下载时,不会自动创建文件夹。再就是配置ASIHTTPRequest,值得注意的是,为了支持断点续传,我们需要设置request的allowResumeForFileDownloads属性为YES。request设置完成后,将其添加到ASINetworkQueue队列去下载即可。下载完成时,执行的方法如下所示:- (void)requestFinished:(ASIHTTPRequest *)request NSLog(finish); if (currentPage self.totalPage) currentPage+; NSUserDefaults standardUserDefaults setObject:NSString stringWithFormat:%d,currentPage forKey:NSString stringWithFormat:download_id_%,self.cartoonDic objectForKey:id; progressVgress = currentPage / 30; progressLabel.text = NSString stringWithFormat:%lf,progressView progress * 100; self download; 暂停按钮点击后可以暂停下载,再次点击则继续下载。具体实现是通过当前按钮的标题来判断是执行开始下载还是暂停下载操作。如若执行开始操作,则遍历networkQueue的operations方法返回数组,让其中的request执行clearDelegatesAndCancel方法。当然,按钮标题变成暂停。再次点击,则调用download方法进行下载。4.5 详情模块设计详情界面包括漫画封面、书名、作者、类别等漫画基础信息;分享、收藏、下载等按钮则可以实现相应功能;下面的一个UISegmentedControl则可以切换最下面页面显示简介、章节和评价等信息。具体界面如图4.7所示:图4.7该模块的收藏功能实现是首先通过单例方法获取到书包视图控制器的实例对象,然后判断其数据库是否为空,若不为空,则打开数据库,查询收藏表是否存在;表中若有数据,则查询表中是否有这本漫画,若没有,则将这本漫画数据写入数据库,成功后提示用户成功收藏。如果这本漫画已经存在表中,那么就弹出提醒框,提示用户。点击分享按钮,则弹出一个UIActionSheet,分为微信好友、朋友圈,易信好友、朋友圈四个选项,点击不同的条目,则会通过相应的方式来分享软件和正在观看的漫画。同时,需要实现UIActionSheet的delegate中的- (void)actionSheet:(UIActionSheet*)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex方法。微信开放平台的接入步骤有以下几点:(1)向微信注册我们的应用程序id:到 开发者应用登记页面 进行登记,登记并选择移动应用进行设置后,将获得AppID,可立即用于开发。之前没过审核也可使用;但是现在应用登记完成后还需要提交审核,只有审核通过的应用才能正式发布使用;(2)下载微信终端SDK文件,SDK文件包括 libWeChatSDK.a,WXApi.h,WXApiObject.h 三个。(3)搭建开发环境:将SDK文件中包含的 libWeChatSDK.a,WXApi.h,WXApiObject.h 三个文件添加到我们的工程中;在你的工程文件中选择Build Setting,在Search Paths中添加 libWeChatSDK.a ,WXApi.h,WXApiObject.h 三个文件所在位置;在Xcode中,选择工程设置项,选中“TARGETS”一栏,在“info”标签栏的“URL type“添加“URL scheme”为你所注册的应用程序id;在详情视图控制器的头文件中import WXApi.h 头文件,并增加 WXApiDelegate 协议;(4)在代码中使用开发工具包:在 AppDelegate 的 didFinishLaunchingWithOptions 函数中向微信注册id,调用WXApi 的类方法registerApp;重写AppDelegate的handleOpenURL和openURL方法;在AppDelegate中实现WXApiDelegate协议的两个方法:onReq和onResp,否则调用了WXApi程序会崩溃;(5)最后,我们就可以在详情视图控制器中使用WXApi的sendReq方法啦。SendMessageToWXReq类的实例的属性secene值有0和1,0代表了发送分享到好友,1则表示发送分享到朋友圈。而易信分享的实现和微信分享的实现很相似,这里就略过了。点击下载按钮后,我们需要先行判断本地的存储信息关于下载漫画ID信息,如若没有查询到该漫画的ID,则开始下载,但是若是查询到了,就表明该漫画已经下载过了,所以就弹出一个 MBProgressHUD,告诉用户这本漫画已经下载过了,不需要重复下载。下面部分第一个页面是一个UITextView,用来显示简介,第二个和第三个则是UITableView,分别用来显示章节和评论信息。简介、章节和评论部分信息通过联网请求相应数据,然后解析,再通过通知,将信息传递给详细视图控制器,填充到简介、章节和评论的UI中。点击章节,则跳到对应的章节进行阅读。4.6 阅读模块设计阅读视图控制器中,左上角包括返回按钮,点击可以返回到上一个页面,下面 则包含了上页和下页按钮,点击可以翻页到上一页或者下一页,中间则是一个UISlider,不仅可以显示进度,同时也可以拖动进度条来翻页。而主体部分则是UIImageView控件,用来显示具体漫画内容。点击屏幕中间,可以显示或者隐藏视图头部的控件;点击屏幕左侧,可以翻到上一页;点击屏幕右侧,则可以翻到下一页。具体页面如图4.8所示:图4.8在上页、下页的实现函数中,我们分别需要判断当前的页数是否大于0或小于总页数,否则我们传递的页数参数失效,服务器返回的数据解析则会出错,这时就弹出提醒框,提醒用户这本漫画已经是第一页了或是最后一页了。而slider响应函数中则需将其value转换为整型,再赋值给页数参数。4.7 更多模块设计在此模块,也是用一个UITableView来展现信息。其中包括了主题设置、意见反馈、联系和关于等等。具体界面如图4.9所示:图4.9界面部分,通过- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath方法来配置具体的cell,- (NSInteger)tableView:(UITableView*)tableView numberOfRowsInSection:(NSInteger)section来设置cell的个数。主题设置功能实现如下:(1)配置theme plist文件,由字典组成;key值为主题颜色名称,value值为主题图片包所在路径。(2)在ThemeManager工具类中,getThemePath方法返回主题目录,getThemeImage方法返回当前主题下,根据图片名所找到的图片。(3)ThemeButton这个自定义button工具类,它继承于UIButton类,它的主要的方法就是加载图片loadThemeImage,以及设置图片和背景图片的setImageName 和setBackgroundImageName方法。ThemeImageView实现原理与相似。(4)在ThemeButton初始化时,就已经监听了主题切换的通知。当我们初始化
- 温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

人人文库网所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。