




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
37/39东软信息学院毕业设计(论文)论文题目:基于iOS的远程视频监控系统的设计与实现系所:计算机科学与技术系专业:物联网工程学生:雪学生学号:指导教师:建梅导师职称:完成日期:2015年5月15日东软信息学院DalianNeusoftUniversityofInformation基于iOS的远程视频监控系统的设计与实现摘要自从2007年苹果公司推出其第一代智能手机iPhone,iPhone逐渐的成为一种生活品质的象征,慢慢的越来越多的人在使用iPhone系列产品,例如iPhone,iPad。作为iPhone用户的一种娱乐方式,视频是不可缺少的一部分。很多人渴望使用一款智能,方便,可控性强的视频播放器,我们可以通过视频播放器得到我们想要的一切资源,我们可以看新闻,看故事,科普,感受大自然的奇妙,当我们工作之余,我们可以看些轻松的愉快的视频来缓解压力,并且通过看视频我们可以获取很多知识。视频带给我们的好处是非常多的,所以视频在我们的生活中有着不可取代的地位,那么怎么样是人们在用视频播放器的时候有更好的用户体验呢?这将是我们着重需要研究的。本文描述了基于iOS的视频播放器类软件是如何设计与实现的,会将所用的播放器的简单实现做以介绍,本软件的特色是基于蓝牙等硬件,实现远程控制视频的快进、暂停、播放的功能,方便用户。和新浪微博登陆关联,使用“沙盒”机制,严格控制用户应用程序的访问权限,用户可以自己编辑观看纪录和收藏。有大量的最新的新闻视频搞笑视频等供用户观看,并有清除缓存功能方便用户管理存。主要实现目标是远程控制:用户可以用手机远程控制pad上观看视频的进度并且自动播放:一段视频播放完了实现自动播放下一段视频。关键词:视频,播放器,iOS,蓝牙,远程DesignandImplementationofTourismSoftwareBasedoniOSAbstractWiththeimprovementofpeople'slivingstandards,travelgraduallybecomeawayoflife,anattitudetolife,ithasbecomeanindispensablepartoflife.Travel,thatis,fromtheirownplacetostaytiredtiredofpeoplestayedplaces.Youwanttotravel,whethersuchthink?Seebackpackersconstantlyupdatedphotos,ornatehalls,therearetimelesstrickle,therearequitehandsomemountains,thereispuresnow,therearesmilingpeople,cryingpeople,lonelypeopletherearealotofbeautyinthesmallendofthelensthatcharmus,likeamagicsoundDuMesa,letusnotbesatisfiedwithjustaspectatortravel.Wealsowanttobedesperate,goontheway.ThisarticledescribestheiOS-based"NoBorder"howthesoftwaredesignandimplementation,iOSAPIandSDKkeyclassesandclassmethodsandXcodeforiPhoneOSplatformandusethissoftwaretodoabriefintroduction,andhighlightedthedevelopmentoftheapplicationprocesstofocusontechnologyandsoftwaredesignprocess."NoBorder"abovetoiOS6.0operatingsystemasadevelopmentplatform,Xcode6.0.1asadevelopmentenvironment,combinedwithpeople'slivesfortheidealtravelideas,conceivedandcompleteda"NoBorder"DesignandImplementation."NoBorder"usingastructureddesignmethodology,setsightsdetailsDestinationSearch,LocationMap,landingacommenttoshareinone,usingsandboxasalocalcachedatabase,AVOSbuildserverforloginfunction;which,commentsystemalsohastosendcommentsbylocation,whilethegeographicallatitudeandlongitudeencodedasactualnames,nameandothernamessights,attractionsquerymodulecansearchforpointsofinterestwithintherangeenteredbytheuserdependingonthelocation,moretravelRaiders,andotherfunctions;userscanalsousethird-partylOGINSinamicroblogginglanding,microletter,landing,touristscanalsochoosethewayanonymouslogin.Raiderstravelcostsavings,toavoidlossesonthehouseholdeconomy,whileallowingyoutomoreeasilyenjoythefunoftravel.Keywords:Tourism,Raiders,iOS,Xcode,LocationMap目录TOC\o"1-3"\u摘要IAbstractII第1章绪论 51.1论文研究主要容 51.2开发背景与意义 5第2章关键技术介绍 62.1IOS操作系统简介 62.2Xcode开发环境简介 62.3程序开发环境搭建 62.3.1Xcode集成CocoaPods环境搭建 62.3.2网络数据包获取paros环境搭建72.4Objective-c中的关键类72.4.1NSJSONSerialization 72.4.2AFNetworking 82.4.3SDWebImage 9第3章系统分析 103.1构架概述 103.1.1功能构架103.1.2模块需求描述103.2用例图分析 143.3系统开发环境 153.3.1开发环境153.3.2运行环境15第4章系统设计 164.1软件设计原则 164.2系统的功能结构设计 164.2.1MVC架构 164.3“NoBorder”各个模块的E-R图 174.3.1推荐景点174.3.2搜索目的地174.3.3特价优惠184.3.4地图定位184.3.5更多菜单19第5章系统实现 205.1主界面框架搭建 205.1.1推荐景点模块225.1.2目的地搜索模块245.1.3特价优惠模块255.1.4地图定位模块28第6章系统测试 306.1系统测试原则 306.2测试用例 30第7章结论 31参考文献 32致 33第1章绪论1.1论文研究主要容本课题采用iOS手机应用开发技术,在Xcode6.1.0的平台下,进行研究开发。经过研究后,可以实现手机上的诸多功能,其中新闻信息获取,在线选择路线,用户GPS定位三个模块,同时,该APP有着非常好的用户交互界面,操作简单,功能强大,让你足不出户即可享受世界美景,了解旅游行业动态,同时也可以帮您规划旅行路线,旅行行程等。不论是出门在外还是宅在家中,该APP都是理想的伴侣。本软件包含诸多模块:如系统推荐景点信息展示模块、用户搜索景点模块、景点特价优惠信息模块、地图定位模块、登陆分享评论模块、附近美食搜索模块等。论文从需求定义、软件体系结构设计、数据持久化方式、功能分析、关键代码解析、界面展示等方面对“NoBorder”做了详细的介绍。1.2开发背景与意义iOS操作系统从2011年的时候随着iPhone4的发布开始被世人所重视,iOS凭借其独有的流畅性、安全性一直备受青睐,现在也成为三大移动终端的系统领导者。随着智能手机的广泛应用,智能手机现在有Windowsmobile,Palm,Linux,iphone,Android等操作系统,但是其中iOS操作系统的智能手机在中国市场所占份额最高。日常生活中我们经常在空闲的时候拿出手机玩,其中多媒体的应用很是广泛,像播放视频,播放音乐,浏览图片,这都是我们很关注的部分,多媒体的应用现在也很广泛,手机系统界面都很单一,传统,让人使用几次后就产生腻烦的感觉,而iOS系统有很好的用户体验型,以与有好的GUI图形交互界面。iOS系统不论从开发者的角度还是用户的角度来是,都是一款极具潜力的操作系统。随着科技的发展和进步,现在越来越多的电子产品在走向微型化,智能化,人们对电子产品的移动性,便携性,多功能性等的要求越来越高,人们已经不仅仅局限于在家中使用这些设备,更多的是希望在任何时间任何场合都能使用它们,所以智能手机已经被当代人们广泛使用,很多人喜欢悠闲的听着音乐,欣赏多姿多彩的视频,所以手机上的应用程序已经成为人们闲暇时间最好的选择。我选择这个课题研究,是希望更加完善手机的功能,完成这个选题,可以让使我们的手机已经其他基于iOS系统的终端设备如iPodtouch、iPhone、iPad等更好的为人们提供服务,满足人们日益增长的物质需求与精神需求。第2章关键技术介绍2.1iOS操作系统简介iOS(原名:iPhoneOS)是由\o"苹果公司"苹果公司为移动设备所开发的\o"操作系统"操作系统,支持的设备包括\o"IPhone"iPhone、\o"IPodtouch"iPodtouch、\o"IPad"iPad、\o"AppleTV"AppleTV。与\o"Android"Android与\o"WindowsPhone"WindowsPhone不同,iOS不支持非苹果的硬件设备。2007年的1月9日苹果公司在Macworld大会公布iOS,并于同年6月29日发布了iOS的第一个版本。iOS使用基于与苹果麦金塔计算机不同的\o"ARM架构"ARM架构的64位或32位\o"中央处理器"中央处理器,使用由\o"PowerVR"PowerVR视频卡渲染的\o"OpenGLES"OpenGLES3.0以\o"AppleDarwin"Darwin作为基础。iOS系统架构层次分为核心操作系统层(theCoreOSlayer),\o"核心"核心服务层(theCoreServiceslayer),\o"媒体"媒体层(theMedialayer),触控应用层(theCocoaTouchlayer)。2.2Xcode开发环境简介Xcode是由美国苹果公司开发并授权的唯一可以编译iOS程序的非开源的集成开发环境。支持\o"C语言"C语言、\o"C++"C++、\o"Fortran"Fortran、\o"Objective-C"Objective-C、\o"Objective-C++"Objective-C++、\o"Java"Java、\o"AppleScript"AppleScript、\o"Python"Python以与\o"Ruby"Ruby,还提供\o"Cocoa"Cocoa、\o"Carbon(API)"Carbon以与Java等编程模式。Xcode前身是继承自\o"NeXT"NeXT的\o"ProjectBuilder(页面不存在)"ProjectBuilder。Xcode使用\o"GDB"GDB作为其后台\o"调试工具"调试工具。从Xcode3.1开始便附带了iOSSDK,可供使用者开发iOS程序。Xcode的编译速度极快,开发效率非常高,众所周知,在构建中引进多重处理器可以提高速度,而Xcode帮你实现这个明显的结论。利用支持Rendezvous的分布式构建功能,可以轻易地把编译工作量分散到闲置的电脑上来寄放构建,或者更好是在单独的电脑上开发一个专门的Xserve构建寄放区,快速处理耗时的任务。2.3程序开发环境搭建2.3.1Xcode集成CocoaPods环境搭建先安装Ruby环境,MAC系统下默认安装,只需将Ruby环境升级为最新版,在终端输入:$gemupdate–system它主要用于升级本地Ruby环境,此时会出现ERROR:Whileexecutinggem...(Gem::FilePermissionError)Youdon'thavewritepermissionsforthe/Library/Ruby/Gems/2.0.0directory.zijingMacBook-Pro:~shiyunlei$sudogemupdate—system这个是因为你没有权限去更新Ruby这个时候你可以在终端使用:$sudogemupdate—system来进行升级。安装CocoaPods时我们要访问,该需要连接国外的VPN,这样下载安装会受到限制,我们可以用淘宝的Ruby镜像来访问该,方法如下:1、gemsources--removes:///。2、/然后使用下面的命令查看是否更换镜像成功$gemsources–l。最后在终端输入命令:$sudogeminstallcocoapods等待过后便可完成安装。接着进行第三方类库的集成,该项目需要用到的第三方为SDWebimage、AFNetworking、高德地图SDK,首先使用search命令搜索类库,在终端输入$podsearchAFNetworking(以AFNetworking为例),终端会返回一个AFNetworking的所有版本的列表,然后使用命令$cd/Users/shiyunlei/Desktop/CocoapodsSample进入项目目录,cd后面的是项目的路径,接着使用$touchPodfile创建Podfile文件,用vim编译器编译Podfile文件,输入如下命令$platform:ios,'7.0',$pod'AFNetworking','~>2.3.1'并保存退出,最后使用命令$podinstall来完成AFNeteorking的安装,成功之后目录下便会新增一个以.xcworkspace为后缀的文件,打开即可同样的方法可以集成其他的第三方类。iOS开发证书配置是此项目能在真机上运行的前提之一。iOS有着很完善的规的开发者机制,此项目使用的个人开发者账号,每个账号可以申请两个发布证书,用来在AppStore上发布自己的作品,和三个开发证书,用来进行真机测试。每个证书可生成一个对应的描述文件,该描述文件记录了此账号的状态以与所下挂的证书,进行真机调试前需要将,发布证书或者开发证书和描述文件导入Xcode中。然后再项目设置中的Buildsetting->codesigning中设置相应的证书以与描述文件,最后在运行设备中选择已经加入开发者的iOS设备,运行后便可进行调试。2.3.2网络数据包获取paros环境搭建此项目的所有接口为抓取其他同类App的网络数据包而来,因此需要在本机配置网络数据包劫持环境,该项目使用的工具为paros,首先该环境必须在安装有JDK的环境下使用,且手机与电脑必须在同一局域网络下,从官网下载JDK最新版,并配置环境变量即为JDK的安装路径,然后打开paros软件,在Tools->options->Localproxy下根据自己的ip地址来配置localhost的ip地址,端口号为大于8080的任意数,然后进入手机设置->无线局域网设置已连接的网络,将代理改为手动,其中的ip地址和端口号要与paros所设置的完全一致,此时在iphone上运行程序的同时便可以在paros中获得相应的网络数据包。可在Xcode中使用NSJSONSerialization或者NSXMLParser类对其进行进一步的解析。程序运行和会在下方的console有输出显示程序状态。2.4Objective-c中的关键类2.4.1NSJSONSerializationNSJSONSerialization,ios5中apple增加了解析JSON的api-NSJSONSerialization。NSJSONSerialization在效率上远远超越了SBJSON、TouchJSON、YAJL、JSONKit、NextiveJson。因为作为苹果自带的JSON数据解析类,它更好的兼容了iOS的存管理机制,JNSJSONSerialization提供了将JSON数据转换为Foundation对象一般都是NSDictionary和NSArray和Foundation对象转换为JSON数据,可以通过调用isValidJSONObject来判断Foundation对象是否可以转换为JSON数据。该类提供非常便捷的数据类型转换方法,尤其在涉与到网络数据与本地数据相互转化方面和跨平台语言编程方面有着很高的效率,利用NSJSONSerialization可将JSON转换成Foundation对象,也能将Foundation对象转换成JSON,转换成JSON的对象必须具有如下属性:1.顶层对象必须是NSArray或者NSDictionary;2.所有的对象必须是NSString、NSNumber、NSArray、NSDictionary、NSNull的实例;3.所有NSDictionary的key必须是NSString类型;4.数字对象不能是非数值或无穷。NSDictionary中的key就是json字符串中的key,object就是json字符串中的value,isValidJSONObject:方法是检测Foundation对象能否合法转换为JSON对象,dataWithJSONObject:options:error方法是将Foundation对象转换为JSON对象,参数NSJSONWritingPrettyPrinted的意思是将生成的json数据格式化输出,这样可读性高,不设置则输出的json字符串就是一整行。2.4.2AFNetworking该项目会从网络上请求数据,所有的数据都从网络接口中来,因此用到了大量的网络请求,AFNetworking是一个轻量型的第三方网络库,适用于iOS以与MacOSX.它构建于在NSURLConnection,NSOperation,以与其他熟悉的Foundation技术之上.它拥有良好的架构,丰富的api,以与模块化构建方式,使得使用起来非常轻松。他可以非常便捷和迅速的从一个url来得到json数据,并以NSMutableDictionary的形式返回,采用Block语法进行回掉。为了更好的处理向Web站点的请求,包括处理Session,Cookie等细节问题,使用AFNetworking则是更好的选择,他可以用于发送请求,接收的响应,但是不会缓存服务器的响应,不能执行HTML页面中的JAvascript代码,同时,AFNetworking还置支持JSON,plist文件和XML文件的解析,使用比较方便。使用之前需要实例化一个AFRequestOpeartionManger对象,根据服务器容的不同,为AFRequestOpeartionManger对象指定不同的解析格式,该对象默认的解析格式是JSON和Plist文件解析器。发送GET请求用:Manager对象调用GET:parameters:success:failure:方法即可,success代码块和failue代码块在网络请求成功/失败过后调用。2.4.3SDWebImageSDWebImage是iOS平台上非常优秀的异步加载图片的第三方类库,这个类库提供一个UIImageView类别以支持加载来自网络的远程图片同时支持GIF动画,通过对UIImageView的类别扩展来实现异步加载替换图片的工作,同时该类还具有缓存管理、异步下载、同一个URL下载次数控制和优化等特征。它支持64位,因为使用苹果自带的GCD多线程机制,所以可以保证在加载大量图片的情况下主线程永远不会被堵塞,同时具有很完善的缓存管理功能,使同样的地址不会被请,也不会造成存泄漏等问题,其部分使用category类目来完,如UIImage+GIF.h、UIButton+WebCache、UIImage+MultiFormat等,在使用的时候首先需要引入头文件#import“SDWebImag.h”,然后使用-(void)setImageWithURL:(NSURL*)urlplaceholderImage:(UIImage*)placeholder或-(void)setImageWithURL:(NSURL*)urlforState:(UIControlState)stateplaceholderImage:(UIImage*)placeholder方法来完成异步加载图片的操作,同时可以使用该类自带的占位图获得更好的体验效果。大致的使用步骤如下:(1)加载图片准备入口setImageWithURL:placeholderImage:options:会先把placeholderImage显示,然后SDWebImageManager根据URL开始处理图片。(2)检查本地缓存进入SDWebImageManager-downloadWithURL:delegate:options:userInfo:,查找本地图片是否存在queryDiskCacheForKey:delegate:userInfo。(3)展示图片如果存中已经有图片缓存,则回调imageCache:didFindImage:forKey:userInfo:到SDWebImageManager。如果没有缓存则SDWebImageManagerDelegate回调webImageManager:didFinishWithImage:到UIImageView+WebCache等前端展示图片。(4)将图片缓存将图片保存到SDImageCache中,存缓存和硬盘缓存同时保存。写文件到硬盘也在以单独NSInvocationOperation完成,避免拖慢主线程。第3章系统分析3.1构架概述3.1.1功能构架经过需求分析,结合自己的所掌握的编程技巧,确定“NoBorder”的功能为推荐景点、搜索目的地、特价优惠、地图定位,更多菜单,其中更多菜单又分为今日新闻、附近美食、我要登陆、说点什么,功能层次图如图3.1所示。图3.1系统功能层次图3.1.2模块需求描述该应用是一款和旅行类有关的APP,本软件界面友好,功能完善,用户可以通过此APP了解到当今现代的旅游行情,其中包含的新闻功能可使用户不出家门便可尽知天下事,同时当用户出门在外的时候,还可以帮助用户定位当前的地理位置,显示当前的坐标,同时以自身坐标为圆心搜索附近的美食,包括美食的做法,同时还有评论功能,用户可以在论坛上自己发言,发表对景点以与其他事件的一些看法。让游客互动,是出门在外的必备应用。本应用做了本地存储,并没有使用通常的splite数据库,而是使用了iOS所特有的沙盒机制sandbox作为本地持久化的方法,因为沙盒机制会比数据的效率更高,他可以直接将App信息存储到sandbox的根目录下,而且移动端的开发对iOSipa包的大小有着严格地限制,并且此App并没有太多复杂的数据,且不需要对数据进行过多的操作,只需要将数据存入本地,在没有接入互联网的时候会显示本地数据。因此使用sandbox来代替数据库splite以达到更好的目的。更多菜单里面包含了附近美食、当日新闻、评论列表、登陆模块,其中附近美食考虑到不同的旅游景点不仅仅有不同的景色,同时也有当地的美味食物,特色小吃,而这些也是旅行中不可缺少的,通过附近美食,用户可以对当地美食文化的一个深入了解,同时也可以学会美食的详细做法。当天新闻可以让用户在旅行的途中或者是家中浏览当天所发生的事情。评论列表可以让用户发表自己对App的或者是对景点的一下见解,让用户与用户间更好的交流。登录模块分为第三方登录和匿名登陆。用户登录后可进行发言。第三方包括微信、、人人、豆瓣等第三方登陆平台。如上图3.1所示,“NoBorder”从推荐景点、登录、评论、地图定位四大模块进行分析,这些模块根据不同的设计从而实现不同功能,下面分别阐述每个模块具体功能。(1)推荐景点推荐景点模块功能结构图如图3.2所示。图3.2推荐景点功能结构图推荐景点页面共有以上六种功能,强力推荐景点为每隔一段时间App会自动为用户推荐四到五个热门景点,以UIScrollView滚动条的方式展现出来,用户点击进入可查看景点详情;最新热门游记模块为一些旅行达人把自己的行程感受,分享出来,包括目的地景色、目的地路线、门票价格等信息,供其他旅客浏览,同时下方的评论列表也可看到其他人的看法和意见;每日精选图片主要提供者了一些美丽景色的图片和其出处供大家参考,用户可以根据图片来判断自己是否喜欢最终决定是否前往,节省了时间的同时也帮用户更好的制定旅行计划;旅行达人推荐模块会把定期评选出来的旅行达人展示出来,包括达人所旅行过的景点,今日旅行专题模块每天会给用户推荐一个城市,用户可以看到这个城市中所有的著名景点以与风土人情,同时还可显示推荐游览顺序避免绕路;本周线下活动模块显示了官方所组织的一些活动,用户可根据自己的喜好选择相应的活动,查看活动详情与报名方式等。(2)登录模块登录模块集成了多种登录方式,包括新浪、腾讯等国一些主流的社交平台账号登陆,登陆之前会先判断用户是否已经登录,如果已经登录这直接显示登录用户的信息,其功能结构如图3.3所示。图3.3登录模块功能结构图(3)评论模块评论模块可以让用户发表自己对App的或者是对景点的一下见解,让用户与用户间更好的交流,其模块功能如图3.4所示。图3.4评论模块功能结构图评论模块可以判断用户的登录状态如果用户已经登录,则使用用户的用户名来发表。如果用户没有登录,则会提示用户先登录或者使用游客身份来发表自己的看法。此登录系统使用的是SingleSignOn(SSO)单点登录模式,即用户只需要登陆一次便可进行发帖,不管程序运行与否,只要用户没有点击登出之前,用户可一直使用所登陆的账号。避免了每次打开软件都需要登录的繁琐步骤,同时使用第三方登录时候支持第三方App跳转,如果手机中没有第三方App,则会以UIWebView的形式让用户登录,达到同样的效果。(4)地图定位模块地图定位模块可以让用户知道自己的实时位置信息,同时地图可以以三种方式展现出来,包括卫星地图模式、标准地图模式、混合地图模式,起到一个给用户引导的作用。其模块功能如图3.5所示。图3.5地图定位模块功能结构图3.2用例图分析系统用例图如图3.6所示。图3.6系统用例图通过系统用例图来编写用例,详细信息如表3.1至3.5所示。表3.1推荐景点例描述表用例名称推荐景点参与者用户用例概述用户点击UITabBar上的“推荐”选项,进入推荐景点界面前置条件成功打开软件,网络连接正常基本事件流点击“推荐”选项显示推荐景点的主界面表3.2搜索目的地用例描述表用例名称搜索目的地参与者用户用例概述用户点击“目的地”图标,主页面便会跳转到目的地界面,用户可以通过上方的UISearchBar输入想要搜索的容前置条件网络连接正常基本事件流点击“目的地”选项查看默认的目的地列表用户搜索目的地后显示搜索结果表3.3特价优惠例描述表用例名称特价优惠参与者用户用例概述用户点击“特价优惠”选项,显示所有优惠信息,同时用户可从上方的选项卡中按照自己的要求筛选所需要的容。前置条件网络连接正常基本事件流点击“特价优惠”进入特价优惠界面通过上方选项卡筛选表3.4地图定位用例描述表用例名称地图定位参与者用户用例概述点击“地图定位”图标,同时允许App使用您的位置信息前置条件网络连接正常,已经授权App使用手机位置信息基本事件流点击“地图”允许App获取位置信息查看自己的位置表3.5更多菜单用例描述表用例名称更多菜单参与者用户用例概述回到“推荐景点”页面,点击“更多菜单”图标前置条件网络连接正常,回到推荐景点页面基本事件流1.点击推荐景点2.点击更多菜单3.3系统开发环境3.3.1开发环境(1)操作系统和开发语言:MacOSXYosemite10.10.2,Objective-c。(2)开发工具:Xcode6.0.2。3.3.2运行环境(1)ARM9开发板型号:S5PA210。(2)操作系统:iOS6.0以上。(3)硬件参数:CPU:苹果A6ImaginationPowerVRSGX543MP3、主频1Ghz,DDRII:1GB、屏幕尺寸4.0英寸。(4)模拟器硬件参数:CPU:IntelCorei5、主频:2.9GHz、存:8GB1867MHzDDR3,图形卡:IntelIrisGraphics61001536MB。第4章系统设计4.1软件设计原则“NoBorder”设计严格遵循软件工程设计原则,满足以下标准。(1)可靠性和健壮性软件功能健全,存管理得当,不会出现存访问错误或者程序异常崩溃的问题;并且对于不合法数据,都做了得当的处理,不会影响程序的正常运行。(2)可修改性从需求分析、用例分析到数据库设计、软件结构设计到最终的实现和测试,都有详细且严密的文档,符合科学的设计方法,系统性能易于调整。(3)容易理解、程序简便软件的变量的声明和方法的定义采用有意义的英文单词或词组,尽可能采用iOSSDK与公开API提供的库函数来实现具体的功能,摒弃了复杂算法语句的堆砌,和私有API,将完成某个功能的语句封装成方法,调用简便,语意连贯,简单明了。(4)可测试性对于任意一组数据集合,程序都能给出正常的应答。(5)可扩展性软件设计时考虑到未来功能的不断完善,采用模块化设计方法,具有高聚的特点,接口与实现分离便于扩展。(6)标准化原则程序的设计与实现均基于业界开放式标准,符合国家和信息产业部的规。4.2系统的功能结构设计“NoBorder”总体功能结构架构从进入系统、推荐景点、搜索目的地、特价优惠、地图定位、附近美食、当日新闻、登陆评论等这些方面来搭建,总体符合软件工程中高聚、低耦合的结构原则。4.2.1MVC架构MVC全名是Model,View,Controller,是模型-视图和控制器的缩写,一种软件设计典,用一种业务的逻辑数据来显式分离的方法组织代码,将业务逻辑聚集到一个部件里面,在界面和用户围绕数据的交互能被改进和个性化定制的同时而不需要重新编写业务逻辑。MVC被的发展起来用于映射传统的输入、处理和输出功能在一个逻辑的图形化用户界面的结构如图MVC框架结构图4.1所示。图4.1MVC框架结构4.3“NoBorder”各个模块的E-R图4.3.1推荐景点用户通过点击进入推荐景点页面后,系统会自动使用网络协议AFNetworking下载数据,然后使用SDWebImage类将下载后数据的异步加载到界面上,该模块分为强烈推荐、最新热门游记、每日精选图片、旅行达人推荐、今日旅行专题、本周线下活动六个板块,其E-R图如图4.2所示。图4.2推荐景点E-R图4.3.2搜索目的地用户进入目的地界面后,可以看到一些系统默认显示地点和其所对应的景色图片,上方的搜索栏可供用户搜索自己喜欢的地方,输入之后便会跳转到详情页,用户可浏览所搜索的景点的信息,搜索目的地模块的E-R图如图4.3所示。图4.3目的地搜索E-R图4.3.3特价优惠用户进入特价优惠界面后可以看到系统默认推荐的优惠信息,同时用户还可以根据上方的选项卡来根据自己的需要对数据进行筛选,点击进入详情用户可看到更多的关于优惠的信息。特价优惠模块E-R图如图4.4所示。图4.4特价优惠E-R图4.3.4地图定位用户进入地图定位界面首先会看到一地图,然后左上角的按钮可以快速定位自己的位置,并显示出来,让用户一目了然,同时右上角的地图类型按钮提供了卫星地图、标准交通地图、混合地图三种地图类型供用户选择,地图支持手势两支缩放等功能,可根据用户的行进速度实时更新地理位置坐标。地图定位模块E-R图如图4.5所示。图4.5地图定位模块E-R图4.3.5更多菜单用户回到推荐景点页面,点击左上角的更多菜单按钮,界面便会向右侧偏移一定的距离,露出附近美食、当日新闻、说点什么、我要登陆四个功能按钮,用户点击任何一个按钮便会进入相应的功能,附近美食会帮助用户查看当地的美食,以与美食的做法,当日新闻则会告诉用户今天所发生的事情,说点什么是用户交流的一个平台,用户可以在这里发表自己的看法,我要登陆则提供了登录功能,用户可以选择匿名方式或者第三方社交软件登录。更多菜单模块E-R如图4.6所示。图4.6更多菜单模块E-R图第5章系统实现5.1主界面框架搭建首先进入软件先是欢迎页的一段文字和上方的按钮,它们是以动画的方式出现,点击上方按钮便可进入到主界面,“NoBorder”主框架所采用的侧边栏效果并没使用第三方来完成,而是通过两个UIView层的交替变化来完成的,同时引用了UIView层的动画效果和CALayer层的试图效果,模仿新版腾讯的侧边栏效果,“NoBorder”欢迎引导页面如图5.1所示。侧边栏效果如图5.2所示。图5.1“NoBorder”欢迎引导页面图图5.2“NoBorder”侧边栏效果图其中UIView层动画关键代码如下:[UIViewanimateWithDuration:2animations:^{self.maskingView=[[UIVisualEffectViewalloc]initWithEffect:[UIBlurEffecteffectWithStyle:UIBlurEffectStyleDark]];self.maskingView.alpha=0.8;[self.mainImageaddSubview:self.maskingView];[self.mainLabelsetFrame:CGRectMake(55,189,211,325)];}completion:^(BOOLfinished){[UIViewanimateWithDuration:2animations:^{[self.beginButtonsetFrame:CGRectMake(78,64,164,66)];}completion:^(BOOLfinished){}];}];5.1.1推荐景点模块程序进入后首先会进入推荐景点页面,其中会有强烈推荐、最新热门游记、每日精选图片、旅行达人、今日旅行专题,本周线下活动六个模块展示给用户,供用户选择,推荐景点界面如图5.3所示。图5.3推荐景点页面图点击对应的板块会进行相应的跳转,同时再向下滑动页面的时候下方的UITabBar会自动隐藏,为展示留出来了更多的地方,其中跳转详情界面间通信的关键代码如下。#pragmamark-#pragmamarkcell点击事件-(void)tableView:(UITableView*)tableViewdidSelectRowAtIndexPath:(NSIndexPath*)indexPath{NSLog("index====%ld传统方法显示的",indexPath.row);if(indexPath.row==1){[selfperformSegueWithIdentifier:"热门"sender:nil];}if(indexPath.row==7){[selfperformSegueWithIdentifier:"精选"sender:nil];}if(indexPath.row==11){[selfperformSegueWithIdentifier:"网页"sender:nil];}if(indexPath.row==14){WebViewViewController*web=[[WebViewViewControlleralloc]init];[websendValueURL:"breadtrip./m/club/all/list/"];[self.navigationControllerpushViewController:webanimated:YES];}}#pragmamark-#pragmamarkstoryBoard跳转时所走的方法-(void)prepareForSegue:(UIStoryboardSegue*)seguesender:(id)sender{NSIndexPath*index=[self.mainTableViewindexPathForCell:sender];if([segue.identifierisEqualToString:"热门"]){YouJiViewController*youJi=segue.destinationViewController;[youJisendValueWithURL:YOUJI];}elseif([segue.identifierisEqualToString:"精选"]){JingXuanTuPianViewController*jingXuan=segue.destinationViewController;[jingXuansendValueURL:JINGXUAN];}elseif([segue.identifierisEqualToString:"网页"]){WebViewViewController*web=segue.destinationViewController;[websendValueURL:LVXING];}if(index.row>=2&&index.row<=6){YouJiInfoViewController*youjiInfo=segue.destinationViewController;[youjiInforeceiveUrl:[[[[[self.receiveDicobjectForKey:"elements"]objectAtIndex:1]objectForKey:"data"]objectAtIndex:index.row-2]objectForKey:"id"]title:[[[[[self.receiveDicobjectForKey:"elements"]objectAtIndex:1]objectForKey:"data"]objectAtIndex:index.row-2]objectForKey:"popular_place_str"]];//[self.navigationControllerpushViewController:youjiInfoanimated:YES];}}下方UITabBar会根据滚动自动消失的关键代码如下。首先在该类中遵循<UITableViewDataSource,UITableViewDelegate>两个协议,然后通过[self.mainTableViewsetDataSource:self];[self.mainTableViewsetDelegate:self];来设置代理,最后设置根据便宜量来隐藏-(void)scrollViewDidScroll:(UIScrollView*)scrollView{[self.tabBarController.tabBarsetAlpha:1-(scrollView.contentOffset.y/500)];}5.1.2目的地搜索模块目的地搜索界面提供了展示系统默认推荐的目的地和搜索用户想要去的目的地的功能,同时用户还可以点击详情查看所搜索的容,其中搜索用的关键代码如下。首先该类需要遵循两个UITableView协议和一个UISearchBar协议,<UITableViewDataSource,UITableViewDelegate,UISearchBarDelegate>,然后设置UISearchBar的代理_search.delegate=self;最后开始在其代理方法里实现搜索功能,#pragmamark-#pragmamark搜索栏取消按钮点击事件-(void)searchBarCancelButtonClicked:(UISearchBar*)searchBar{[self.searchresignFirstResponder];}#pragmamark-#pragmamark搜索栏搜索按钮点击事件-(void)searchBarSearchButtonClicked:(UISearchBar*)searchBar{WebViewViewController*web=[[WebViewViewControlleralloc]init];[websendValueURL:[[NSStringstringWithFormat:"breadtrip./search/?q=%",self.search.text]stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];[self.navigationControllerpushViewController:webanimated:YES];[self.searchresignFirstResponder];}该界面与搜索结果的图如图5.5所示。图5.5推荐景点与搜索结果页面图5.1.3特价优惠模块用户进入特价优惠界面后可以看到系统默认推荐的优惠信息,同时用户还可以根据上方的选项卡来根据自己的需要对数据进行筛选,点击进入详情用户可看到更多的关于优惠的信息。特价优惠模块图如图5.6所示。图5.6特价优惠与筛选页面图该页面使用UITableView搭建,下方的UITabBar同样具有滑动隐藏的功能,选项卡使用UITableViewHeader来完成并且做了高斯模糊效果,关键代码如下,-(UIView*)tableView:(UITableView*)tableViewviewForHeaderInSection:(NSInteger)section{if(tableView==_littleTableView){returnnil;}NSArray*arr=[NSArrayarrayWithObjects:"产品类型","目的地","出发城市",nil];UIView*view=[[UIViewalloc]init];[viewsetBackgroundColor:[UIColorcolorWithRed:0.945green:0.929blue:0.882alpha:0.8]];for(inti=0;i<3;i++){UIButton*button=[UIButtonbuttonWithType:UIButtonTypeCustom];[buttonsetFrame:CGRectMake(13+i*100,10,90,30)];[buttonsetTag:i+1];[buttonaddTarget:selfaction:selector(buttonAction:)forControlEvents:UIControlEventTouchUpInside];[button.layersetCornerRadius:15];[button.layersetBorderColor:[UIColorcolorWithRed:0.145green:0.725blue:0.796alpha:1.000].CGColor];[buttonsetTitleColor:[UIColorcolorWithRed:0.145green:0.725blue:0.796alpha:1.000]forState:UIControlStateNormal];[buttonsetTitleColor:[UIColorcolorWithRed:0.102green:0.513blue:0.567alpha:1.000]forState:UIControlStateHighlighted];[button.layersetBorderWidth:1];[button.titleLabelsetFont:[UIFontsystemFontOfSize:15]];[buttonsetTitle:[arrobjectAtIndex:i]forState:UIControlStateNormal];[buttonsetBackgroundColor:[UIColorclearColor]];[viewaddSubview:button];}returnview;}选项卡筛选功能使用逻辑判断、URL拼接、分段网络请求和JSON数据结构解析来完成,其中关键代码如下,_number=sender.tag;_arrType=[NSArrayarrayWithObjects:"全部","自由行","达人带队","周边游","团队游","当地游",nil];_arrLoation=[NSArrayarrayWithObjects:"全部","国","东南亚","日","港澳台","欧洲","南亚",nil];_arrStar=[NSArrayarrayWithObjects:"全部","","","日","","","","","","",nil];NSArray*bigArr=[NSArrayarrayWithObjects:_arrType,_arrLoation,_arrStar,nil];_littleArray=[[NSMutableArrayalloc]initWithArray:[bigArrobjectAtIndex:sender.tag-1]];if(mark==YES){_littleTableView=[[UITableViewalloc]initWithFrame:CGRectMake(0,0,320,0)];[_littleTableViewsetBackgroundColor:[UIColorclearColor]];_littleTableView.dataSource=self;_littleTableView.delegate=self;[_littleTableViewsetBackgroundColor:[UIColorcolorWithRed:0.945green:0.929blue:0.882alpha:1.000]];_viewChoose=[[UIViewalloc]initWithFrame:CGRectMake(0,self.mainTableView.frame.origin.y+114,320,0)];[UIViewanimateWithDuration:0.5animations:^{[_littleTableViewsetFrame:CGRectMake(0,0,320,300)];[_viewChoosesetFrame:CGRectMake(0,self.mainTableView.frame.origin.y+114,320,self.mainTableView.frame.size.height-114)];}completion:^(BOOLfinished){}];[_viewChoosesetBackgroundColor:[UIColorcolorWithWhite:0.000alpha:0.320]];[_viewChooseaddSubview:_littleTableView];[self.viewaddSubview:_viewChoose];mark=NO;}else{[_viewChooseremoveFromSuperview];mark=YES;}[_littleTableViewreloadData];5.1.4地图定位模块用户进入地图定位界面首先会看到一地图,然后左上角的按钮可以快速定位自己的位置,并显示出来,让用户一目了然,同时右上角的地图类型按钮提供了卫星地图、标准交通地图、混合地图三种地图类型供用户选择,地图支持手势两支缩放等功能,可根据用户的行进速度实时更新地理位置坐标。地图定位模块图如图5.7所示。图5.7地图定位页面图地图定位模块采用的是拼过自带的地图API接口,而地图显示模块与地理编码模块使用的是高德地图API,使用cocoaPods集成了高德地图SDK,其中关键代码如下所示,[self.mapViewsetUserTrackingMode:MAUserTrackingModeFollowWithHeadinganimated:YES];//地图跟着位置移动self.mapView=[[MAMapViewalloc]initWithFrame:CGRectMake(0,0,self.view.frame.size.width,self.view.frame.size.height)];self.mapView.delegate=self;[self.mapViewsetMapType:MAMapTypeSatellite];[self.viewaddSubview:self.mapView];CLGeocoder*geocoder=[[CLGeocoderalloc]init];[geocoderreverseGeocodeLocation:userLocation.locationcompletionHandler:^(NSArray*placemarks,NSError*error){if(placemarks.count>0){//floatzoomLevel=0.002;//精度CLPlacemark*placemark=[placemarksobjectAtIndex:0];[self.myLocationsetText:[placemark.addressDictionaryvalueForKey:"Name"]];}}];第6章系统测试6.1系统测试原则“NoBorder”测试以黑盒测试为主,以iPhone5、iPhone5s为主,在进行白盒测试时,以静态测试和检测为主。6.2测试用例推荐景点能测试用例表如表6.1。表6.1冰箱开关功能测试用例一级模块名称推荐景点二级模块名称无用例描述用户打开、关闭推荐景点页面测试序号C1测试过程与数据用例编号U1进入主界面,点击推荐景点选项,进入界面用例编号U2点击其他选项,退出推荐景点页面预期结果U1进入成功,列表被刷新,显示了推荐界面U
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年镇江资格证模拟考试
- 公司合作养猪合同范本
- 冷镦模具合同范本
- 冰箱售后服务合同范本
- 农村水田改造合同范本
- 代理交易合同范本
- 兄妹赠予房产合同范本
- 北京出租车司机合同范本
- 农村承包经营户合同范本
- 临时店面员工合同范本
- DB11 938-2022 绿色建筑设计标准
- 部编版语文八年级下册第六单元名著导读《钢铁是怎样炼成的》问答题 (含答案)
- 2022译林版新教材高一英语必修二单词表及默写表
- 全国青少年机器人技术等级考试:二级培训全套课件
- 九种中医体质辨识概述课件
- (外研版)英语四年级下册配套同步练习 (全书完整版)
- 小学数学计算能力大赛实施方案
- 古诗词诵读《虞美人》课件-统编版高中语文必修上册
- 文物学概论-中国古代青铜器(上)
- 制作拉线课件
- 某物业公司能力素质模型库(参考)
评论
0/150
提交评论