毕业设计(论文)-基于iOS移动端的多功能工具箱.doc_第1页
毕业设计(论文)-基于iOS移动端的多功能工具箱.doc_第2页
毕业设计(论文)-基于iOS移动端的多功能工具箱.doc_第3页
毕业设计(论文)-基于iOS移动端的多功能工具箱.doc_第4页
毕业设计(论文)-基于iOS移动端的多功能工具箱.doc_第5页
已阅读5页,还剩26页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

盐 城 师 范 学 院毕业设计基于iOS移动端的多功能工具箱学生姓名 学 院 信息工程学院 专 业 软件工程 班 级 学 号 指导教师 2016 年 5月 16日盐城师范学院毕业设计基于iOS移动端的多功能工具箱摘 要随着当今时代信息化的飞速发展,社会已经进入了网络时代,手机作为其中不可缺少的重要工具,大量的手机应用也涌入了人们的生活,经过充分的需求分析,我对手机的一些常用小工具进行了汇集,让人们可以只打开一个应用就可以实现所有工具的使用,内含的主要的工具有:计算器、录音机、音乐播放器、系统相机和相册、星座运势查询、手机手电筒、二维码扫描。本文主要阐述了基于iOS移动端的多功能工具箱的设计和开发,先论述了本系统的研究目的、课题意义、以及研究的过程,接着对系统的功能设计以及数据存储所用的沙盒机制进行阐述,最后论述了详细实现和系统测试的过程,本工具箱能够灵活的在各种小工具中进行切换,使得本系统运用起来非常方便。在实现过程中,使用了objective-c语言和开发工具Xcode,数据存储利用的是iOS的沙盒存储机制。【关键词】工具箱;iOS;objective-c;xcode;全套设计加扣 3012250582Multi function toolbox based on iOS mobile terminalAbstract with the rapid development of the present era of information technology, the society has already entered the era of network, mobile phone for which an important and indispensable tool, a large number of mobile phone application is flooding the peoples life, after the full needs analysis, I on the phone some commonly used coolie articles were collected, so that people can only open an application can be achieved using all the tools, contains the main tools are: query calculator, tape recorders, music player, system camera and photo albums, horoscope, mobile flashlight, two-dimensional code scanning. This paper mainly expounds the iOS mobile terminal multi function toolbox is designed and developed based on. First of all, the paper discusses the the system, the purpose of the study, significance of the subject, and the research process, then the system function design and data storage for sandboxing mechanism is expounded, finally discusses the detailed implementation and system testing process, the toolbox can flexibly in a variety of gadgets to switch, making the system very easy to use. In the implementation process, the use of Objective-C to language and development tools Xcode, data storage utilization is iOS sandbox storage mechanism. Keywords Tool box; iOS; Objective-C; xcode;盐城师范学院毕业设计目 录1 课题概述11.1 研究的背景及意义11.2 研究思路11.3 设计的主要内容12 可行性分析22.1 可行性分析22.1.1 经济可行性分析22.1.2 开发技术可行性分析22.1.3 社会可行性分析32.2 项目技术简介32.2.1 主要开发语言objective-c简介32.2.2 xcode工具介绍43 需求分析43.1 功能模块分析43.2 各个模块的目标设计和思路54 系统项目框架搭建64.1 IOS开发中MVC设计模式64.2 开发所用的主要第三方框架74.2.1 Afnetworking框架74.2.2 AVFoudation框架84.2.3 UIKIT框架85 系统详细设计95.1 工具箱主界面设计95.2 计算器模块115.3 音乐播放器145.4 星座运势185.5 录音机205.6 照相机205.7 二维码扫描215.8 手电筒226 系统测试226.1 测试目的226.2 测试方法226.3 测试用例237 结 论24参考文献25致 谢261 课题概述 近几年,随着智能手机的普及,人们和手机相处的时间越来越长,一系列方便人们生活的手机应用也随之而生,各种各样的小工具越来越多,呈现一种蒸蒸日上之态。 此工具箱内含手机中多个系统工具,操作简单,采用xcode开发工具以及引入一些第三方类库,运用objective-c语言进行开发,数据存储在本地,可以进行增删改查操作。1.1 研究的背景及意义随着计算机科学技术和internet技术的飞速发展,基于英特网的手机应用已经开始成为全新的功能需求,而近年来iOS在中国的市场越来越火,并越来越受到人们的关注。苹果系统就安卓而言,最突出的就是细节部分做的很好,既然iOS系统的苹果手机涌入市场已势不可挡,设计出一些基于iOS移动端的常用小工具来方便苹果手机用户的生活也是很必要的。该设计是智能手机与社会日常生活之间密切联系的一种体现,现今的社会,人们已经离不开了手机网络,它已经成为人与人之间交流的一种形式,人们解决问题最方便的手段就是掏出手机了,比如你想计算数据,你不会再傻傻的去找计算器,因为手机上是自带的,所以有了这些小工具,我们可以节省好多精力和时间。1.2 研究思路本系统的思路比较清晰,因为是对系统工具的汇总,所以需求方面是比较明确的,整个项目先打好框架,xcode开发工具中自带一个mainStoryboard的工具可以用来进行页面布局,有的工具里面需要用到网上的数据,所以前期准备工作需要到网上找到所需要的api接口,然后通过afnetworking框架解析json数据,iOS用到的各种控件都有自己的代理方法,所以我们设计界面时可以通过那些代码方法达到我们的目的,在数据存储方面,我用的是它的沙盒机制,把数据存到本地。最后对系统进行各个功能的测试,发现bug即时处理,并给出测试用例报告。1.3 设计的主要内容本系统开发用的是objective-c语言,在主页面做了7个带图标的功能按钮,以对应7个系统工具。分别如下:简易计算机:可进行加减乘除等基本操作。录音机:完成简单的录音及播放录音的功能。音乐播放器:在线乐库,可以搜索网络歌曲,在播放界面有歌手照片,播放时歌曲和歌词同步。二维码扫描:扫描二维码功能并将扫描结果的网页打开。星座运势:用的是网上接口数据,可实时掌握星座运势和动态信息。手电筒:打开手机手电筒,内含多张手电筒图片。系统相机和相册:打开手机相机,可拍照,打开相册,点击可查看图片。还有闪光灯开关。2 可行性分析2.1 可行性分析可行性分析也可称为可行性研究1,是在网上调查的基础上并辅助其他的信息渠道,结合自己所掌握的知识,针对基于iOS移动端的多功能工具箱的开发是否具备必要性和可能性。对这个项目的开发从技术、操作、经济等不同方面进行分析研究,保证此多功能工具箱的开发成功。即就我自己所掌握的知识能否在规定时间完成项目并且可以达到预定的效果。2.1.1 经济可行性分析此项目要用到苹果电脑的mac系统,所以需要配备一台笔记本,由于在xcode工具中自带模拟器,所以不太需要iphone手机,在之前的学习中,我自己买了一台笔记本,所以设备上不成问题,在项目中需要的资源我在百度API store中也找到了免费的接口,不需要花钱买那些数据信息。开发所需要的图片也可直接从网上挑选下载,所以就经济方面而言,该项目是完全可行的。2.1.2 开发技术可行性分析本次开发需要用到objective-c 语言和xcode工具,必要时也会使用数据库存储,因为我的专业是软件工程,所以在学校的课程中涉猎过计算机语言和数据库的相关方面,在之前的半年中,我一直学习的OC,期间也做过一些小项目,对OC中常用的一些开发框架比较熟悉,如页面布局空间继承的UIKIT框架,基础框架FOUNDATION,还有数据解析用的AFnetworking框架。我自己信息慢慢可以利用所学完成此项目,所以在开发技术方面也是可行的。2.1.3 社会可行性分析手机已经近乎人手一部,而99%的手机都自带自己的系统小工具箱,但是系统工具多种多样,这个项目是主要是选择自己常用到的一些生活工具来完成设计,旨在方便生活,而且这个项目app不会发布出去,只是自己使用一下,开发这款音乐播放器符合国家的方针政策,不影响任何组织的利益,没有宗教方面的宣传同时不会影响社会稳定。所以可以得出本项目在社会可行性方面是可行的。2.2 项目技术简介本次项目主要用到的技术是:objective-c + xcode:2.2.1 主要开发语言objective-c简介Objective-c是当前iOS开发中的主流语言,是扩充C的面向对象编程语言,它被设计成为了一种能够支持面向对象编程的语言,它提供了类的定义实例以及消息等方面的语法。还提高了类的结构的动态扩展能力,是最早的面向对象编程语言之一。Objective-c的优点:1) Cateogies,类目是一种利用oc的动态运行分配机制为现有的类添加新的方法的机制。2) Posing,即为“冒充”的意思,它与1)相似,但本质不同,它的存在是让我们可以用子类冒充父类,让我们快捷的实现父类变成子类的行为。3) 动态识别,oc在语法上不可以多重继承,它通常采用协议的方式来完成目的。4) 消息传递,在oc中函数调用都是先被编译器进行预处理操作,通常是调用obj_msgSend方法发送消息。5) 能进行指标计算6) 不是一种复杂的C衍生语言7) 它可以和c+可以混合编程 缺点:1) 不支援命名空间2) 不支持运算符重载3) 不支持多重继承4) 用函数调用的方法使用动态运行时类型,因此很多编译时可以优化代码的方法用不到。2.2.2 xcode工具介绍Xcode开发工具只能在苹果电脑的mac操作系统下运行,它是苹果公司给开发者提供的非开源集成开发环境,xcode的版本一直在更新,在开发过程中xcode的编译速度很快,而且内部设置了好多快捷键,所以操作起来既方便又快捷。我们都知道,多重处理器可以在构建时帮我们提高速度,而xcode采用Rendezvous的分布式创建功能,可以轻松的分散编译工作量到别的电脑上寄放,从而快速的处理那些耗时任务,它本身自带模拟器,在不必要进行真机调试时可以方便的满足我们在各种苹果设备上运行的需求。3 需求分析所谓需求分析,是指在开发前我们要明确自己的目标,搞明白需要解决哪些问题,问题如果解决需要达到什么要求等,具体的要求比如我们需要哪些条件,条件充足时又要实现哪些效果,达到什么目的,可以说,需求分析是必不可少的阶段。3.1 功能模块分析在经过可行性分析以后,剩下的就是此工具箱系统的功能模块设计,经过其他相似应用的对比,我也有了自己设计的一些想法,因为是工具箱系统,所以我要把常用的手机工具都找出来集中到一起去,在此基础上,发挥自己的主观能动力,在原有的基础上加点新意,下面便是此工具箱的功能模块图。运势详情运势选择结果反馈扫描相册相机闪光灯开关相机相册音乐详情以及播放音乐搜索计 算 器 二维码扫描手电筒星座运势录音机音乐播放器主界面图3-1 系统的功能模块图3.2 各个模块的目标设计和思路1) 计算器模块:把计算器的按钮信息放入一个数组中,在layoutSubviews中计算可供按钮展现的区域大小,在顶部放置一个label,用来显示计算信息。对每一个运算符号都写一个方法,返回各自的运算结果。2) 录音机模块:布局一个简单的mini录音机,只有采样频率和样点位数2个参数,设置录音和播放按钮,录音完成后,录音文件保存到本地,点击播放按钮时取出保存的录音文字进行播放。3) 音乐播放器模块:连接在线曲库,所以需要调用网络接口,然后要用afnetworking框架解析json数据,歌曲列表用tableview显示,用searchbar来用作搜索框,调用searcchbar的text did change 方法来搜索歌曲,并实时刷新tableview的歌曲列表信息。调用tableview的did select代理方法点击进入每首歌曲的详情界面,会显示歌曲名称和歌手图片信息,点击播放按钮开始播放音乐,这时候我们可以看到正在播放的那句歌词显示为红色。4) 二维码扫描:设置扫描按钮,接着布局二维码扫描框,设置扫描线条的动画,将扫描结果用webview显示出来。5) 相册相机和闪光灯:设置4个按钮,相机、相册、闪关灯开、闪光灯管。点击调用系统的对应功能。6) 星座运势:在第一个界面将十二星座的信息罗列出来,在用按钮覆盖起来,点击每一个按钮进入点击星座的详情界面,在详情界面展示每日、明日、本周、本月、今年、爱情的运势信息,详情界面的信息用网络接口解析的数据,在详情界面点击星座图标进入星座总体特征介绍页面。7) 手电筒:生活常用小工具,只需要调用手机手电筒功能,如果没有添加alertview提示。4 系统项目框架搭建4.1 IOS开发中MVC设计模式图4-1 mvc设计模式图 我们来理解一下上面这幅图,上述的MVC设计模式6被分为模型对象、视图对象、控制器对象,它们的作用分别为封装了应用程序的数据、显示用户看得见的视图对象、充当协调和控制模型对象和视图对象的媒介。其中模型对象(model)定义操作和处理数据的逻辑和运算,当在视图层(view)中进行创建或者修改数据的操作时,最后是通过控制器将信息传递,然后创建或者更新模型对象,当模型被更改时,例如需要加载或者刷新数据时,如果数据可以直接获得,那么通过控制器view会直接刷新,如果数据需要网络连接请求才能得到,它会先通知控制器对象,控制器会监听模型对象发出的通知,然后根据通知来对view进行相应的刷新或其他操作,以上可以得出在整个过程中view和model没有进行直接进行过交互,所有的操作都是控制器协调进行的。本次设计使用的也是MVC设计模式,一个视图对应一个控制器,因为工具较多,所以控制器约也多一些,在设计中我会多用xib文件减少代码量。4.2 开发所用的主要第三方框架4.2.1 Afnetworking框架Afnetworking是一个用于http网络请求的第三方框架9,能够解析出多类型数据,如xml、json等,它的构建技术比传统的NSURLConnection,NSOperation及其他的一些熟悉的框架还好一些,使用时候先创建一个请求示例代码如下:NSURLRequest*request=NSURLRequest requestWithURL:NSURLURLWithString:一个网址; ;然后创建解析的操作指令,并执行操作。示例代码如下:AFJSONRequestOperation *operation;operation start;/操作开始指令用start该设计主要是用afnetworking框架进行网络数据解析,确切的说使用它的get方法解析从百度API STORE里面找的API接口,使用的时候只要用kvc方法直接将需要用到的value和key放到字典中就可以进行网络请求,请求完成后会有2个回调,成功的话就可以取出数据使用。4.2.2 AVFoudation框架这个框架主要用来实现音频、视频、拍照等功能的实现10,它是基于c语言的一套框架,在本设计中,音频播放主要使用框架中包含的audioPlayer完成,它不支持边听边下载,所以一般是存储到本地再进行初始化播放器。我们可以先从框架的整体做个了解,如下图所示:图4-2 AVFoundation在相关框架中的位置图在下文的音乐播放器和系统相机中会有捕捉视频、音频的具体代码,至于静态图像等,大同小异。4.2.3 UIKIT框架UIKitk 框架是iOS开发中的基础框架,几乎所有的界面元素都继承于它,它提供了一系列的类来创建和管理苹果程序中的用户界面、应用程序的对象、绘图模型、控制的处理事件、视图、窗口以及控制触摸屏接口2等等。它框架的类继承图如图所示:图4-3 框架的类继承图示例代码如下:/继承它的一个按钮控件UIButton *fanhuiBtn = UIButton buttonWithType:UIButtonTypeCustom;/添加相应事件fanhuiBtn addTarget:self action:selector(fanhui) forControlEvents:UIControlEventTouchUpInside;5 系统详细设计5.1 工具箱主界面设计图5-1 主界面图用户可以通过不同的工具按钮进入到对应的工具具体页面,主界面的布局是我在创建主界面控制器的时候又创建了控制器的xib文件,接着通过拖拽控件的方式进行每个按钮的布局,如图5.2.1所示:图5-2 主界面拖拽的控件图每个按钮点击一下会进入各自的工具界面,首先在主控制器开头引入各个工具的头文件,在按钮点击事件中写页面跳转代码,具体代码如下:- (IBAction)calculatorBtn:(id)sender /按钮点击事件对应按钮的(touch upinside) /初始化目标控制器MainController *calculatorVc = MainController allocinit;/用present方法跳转到指定控制器 self presentViewController:calculatorVcanimated:YES completion:nil;5.2 计算器模块计算器可以进行简单的加减乘除运算,运算结果会显示在顶部空白的label中,因为设置的数据是float 型,所以会有几位小数。计算器界面如下:图5-3 计算机主界面图计算器模块的界面布局中,考虑到适配性的问题,通过重写layoutSubviews3方法计算label及按钮的位置,然后让控制器的view等于我们重写的view即可,方法如下:-(void)layoutSubviewsCGRectlabelFrame=CGRectMake(startX,startY,labelWidth,labelHeight);_model.result.frame=labelFrame;_model.button.frame=btnFrame;_model.btn.backgroundColor=UIColorblackColor;/获取当前屏幕的整个宽度和高度CGRectbounds=UIScreenmainScreen.bounds;CGFloatwidth=bounds.size.width;CGFloatheight=bounds.size.height;/计算按钮的行数introws=(_model.btns.count+rowCount-1)/rowCount;/计算供按钮展现的区域大小,宽度和label宽度一致CGFloatlastWidth=labelWidth-(rowCount-1)*margin;CGFloatmaxY=CGRectGetMaxY(_model.result.frame)+15; CGFloatlastHeight=height-(rows-1)*margin-bottom-110;/计算每个按钮的宽度和高度CGFloatbtnWidth=lastWidth/rowCount;CGFloatbtnHeight=lastHeight/rows;/依次遍历,重新定位frame的大小_model.btnsenumerateObjectsUsingBlock:(idobj,NSUIntegeridx,BOOL*stop)UIButton*btnn=(UIButton*)obj; intnowRow=idx/rowCount;intnowColumn=idx%rowCount; CGRectframe=CGRectMake(startX+nowColumn*(margin+btnWidth),maxY+nowRow*(margin+btnHeight),btnWidth,btnHeight);btnn.frame=frame; 至于功能模块,把数字键、符号键以及一些特殊操作符分别写到3个不同的数组中:stringBut=0,1,2,3,4,5,6,7,8,9,=,+,-,*,/,%,sin,cos,.,tan,back,clear,squre,M_PI;_handleArry=+,-,*,/,sin,cos,squre,%;_numberArry=0,1,2,3,4,5,6,7,8,9,.,M_PI; 把数组中的object分别设为每一个button的text,点击每一个button会对应一个textResult,把点击后的textResult显示到顶部的label中,至于判断运算符则是用_operationisEqualToString:+5,把每一个运算符都用此方法返回各自对应的值。具体代码如下所示:-(CGFloat)countCGFloatnum01=_num1floatValue;/floatValue是将字符串string型转化为float型数据 CGFloatnum02=_num2floatValue;if(_operationisEqualToString:+) returnnum01+num02;/加号运算if(_operationisEqualToString:-)returnnum01-num02;/减号运算if(_operationisEqualToString:/)returnnum01/num02;/除号运算if(_operationisEqualToString:sin)return(num01)*sin(num02);/正弦值运算if(_operationisEqualToString:*)return(num01)*(num02);/乘号运算return0; 5.3 音乐播放器音乐播放器用的是APISTORE中找的音乐API接口数据,歌曲列表用的是ios开发中的tableview,接口数据需要用afnetworking框架解析成json数据方能使用,下面会给出解析代码,在顶部放置了一个searchBar,可以根据用户的需要搜索网络歌曲,歌曲列表界面和每首歌的详情界面如下:图5-4 音乐播放器歌曲列表图图5-5每首歌曲详情界面图音乐资源的API数据数据解析代码如下,因为用的是Afnetworking中的GET方法解析,在解析前,我们首先需要设置解析的API接口网址url,然后把解析需要的参数放到一个字典中,这里用的是oc中的kvc机制,具体是用setValueforKey方法实现。解析完成会有2个回调,一个成功,一个失败,成功的话里面会含有一个resposeobject的参数,我们所需要的json数据都在里面,然后用valueForKey的方法取得我们需要的值。-(void)apiActionNSString*apiStr=/geekery/music/playinfo;/解析所需的api接口网址NSString*songNameStr=self.dictionvalueForKey:singername;/解析所需的参数NSString*hashStr=self.dictionvalueForKey:hash;NSMutableDictionary*dict=NSMutableDictionaryallocinit;/初始化一个字典dictsetValue:hashStrforKey:hash;/给字典赋值manager.requestSerializersetValue:877ca6880cb086640a47f8fa0a7aa17eforHTTPHeaderField:apikey;/个人API的key值,必须有managerGET:apiStrparameters:dictsuccess:(AFHTTPRequestOperation*operation,idresponseObject)/get方法开始解析songUrl=responseObjectvalueForKey:datavalueForKey:url;/取出名为data的字典/下面几行是把网络歌曲下载并存储到到沙盒中NSURL*url=NSURLURLWithString:songUrl; NSError*error=nil; NSData*data1=NSDatadataWithContentsOfURL:url;NSString*filePath=NSStringstringWithFormat:%/%.mp3,docDirPath,self.dictionvalueForKey:filename;/具体的写入指定目录的代码如下1:data1writeToFile:filePathatomically:YES;/初始化audioplayer播放器NSURL*fileURL=NSURLfileURLWithPath:filePath;audioPlayer=AVAudioPlayerallocinitWithData:NSDatadataWithContentsOfURL:fileURLerror:&error;failure:(AFHTTPRequestOperation*operation,NSError*error)/失败的回调函数; 音乐播放使用的是第三方框架AVFoundation中的audioplayer,因为这个播放工具不支持边下载边放音乐,所以需要先下载到本地,然后从本地文件夹读取资源进行播放,在播放中,我实现了歌词和音乐播放同步的效果,原理就是分离出data中的时间和歌词,然后利用audioplayer中的currentTime属性进行判断,分离歌词和时间具体代码如下: for (NSString *item in arr) /判断item不为空.此处item为每一句歌词包括歌词时间 if (item length) NSRange startrange = item rangeOfString:; NSRange stoprange = item rangeOfString:;/用NSRange分离字符串 NSString *desc = item substringWithRange:NSMakeRange(startrange.location+1, stoprange.location-startrange.location-1); if (desc length = 8) /时间的长度固定为8 NSString *fen = desc substringWithRange:NSMakeRange(0, 2);/ NSString *miao = desc substringWithRange:NSMakeRange(3, 2); NSString *nn = desc substringWithRange:NSMakeRange(6, 2); NSString *time = NSString stringWithFormat:%:%.%,fen,miao,nn; NSNumber *all =NSNumber numberWithInteger:fen integerValue * 60 + miao integerValue;/转换时间格式 t addObject:all;/时间数组添加时间成员 NSString *lyric = item substringFromIndex:10;/歌词 musictime addObject:time; lyrics addObject:lyric;/歌词数组 判断每一行歌词和时间的代码如下:for (int i = 0; i compTime) currentRow = i; else break; 从上面那段代码不难看出,其中最复杂的便是字符串分离,所以要灵活的运用nsrange,当然对for循环和数组的运用也必须扎实,在分离的时候通常用nslong打印可以直观的看到分离结果,即时纠正。5.4 星座运势星座运势模块很好的把十二星座的运势表达出来,对于一些热爱星座的用户来说,是一个不错的选择,本系统可以让用户每天查询到自己的运势情况,因为用的也是网上的api数据,所以数据每天都会更新,它的主界面是十二星座的图标和日期,点击选择你自己的星座调到星座界面,可以查看自己今日、明日、本周、本月、今年的运势信息,随时把握自己的爱情运势、事业运势等。在主界面的设计中,用button覆盖住每个星座的信息,包括图片文字,用代理传值的方式将数据传到详情界面,传过去的数据用作网络请求的参数,这就确保了点击不同的按钮进入的界面获取的数据是不同的。星座运势具体界面如下: 图5-6星座运势详情图在选择界面中先用imageview放置个运势图片,接着在imageview下方放置2个label,分别设置text属性为星座名称和星座日期,最后用一个button覆盖住他们全部,这样我们不管点击字或图片都可以响应按钮点击事件。在选择界面控制器中定义了一个协议把选择的星座名称传到详情界面;协议如代码下:protocoleveryStarViewControllerDelegate-(void)passValueWithInfo:(NSString*)consValue:(UIImage*)starImage:(NSString*)timeString;end 代理协议传值是ios开发中最常用的方法,穿过来的星座名称数据被我用作解析的参数,这样就可以让点击每个按钮获取的数据都不同,数据解析和上文的音乐播放器差不多,在星座运势中,对我来说,比较难的点是今日、明日、本周等的界面切换,它是灵活的运用segmentcontroller来实现的,因为以前没用过,所以对我来说是个挑战,每个segement都有一个对应的index值,我们可通过它的index来控制页面的变化,不停的刷新mytableview,具体代码如下:switch (sender.selectedSegmentIndex) case 0: isSelectedNum = 0; myTableView reloadData;/刷新界面 break; case 1: isSelectedNum = 1; myTableView reloadData; break; case 2: isSelectedNum = 2; myTableView reloadData; break; case 3: isSelectedNum = 3; myTableView reloadData; break; default: break;5.5 录音机 和传统的录音机功能比较相似,这款录音软件可以设置它的采样频率,采样频率分为了22050hz和44100hz两种,样点位数分8位、16位、24位、32位4种,分是否为双声道,点击录制按钮开始录制,再点一次录制结束,录音文件会被保存到本地,点击播放按钮会即时播放刚才的录音内容。5.6 照相机说到系统工具,相机和相册是最经常用到的一种了吧,该设计实在主页面放置4个按钮,尽量做得漂亮点,然后通过点击按钮实现拍照、打开相册以及开关闪光灯的功能,在iOS开发中,相机相关的一些功能主要使用imagepickerviewcontroller实现。首先引入它的delegate,不管是相机还是图库,我们先要做的是先判断这个选择控制器的类型,然后初始化,为了防止出错,可以用alertview来判断是否有系统相机或系统相册,如果没有,给出界面提示,然后就是调用各种代理方法,iOS开发中使用代理可以很好的减少代码量,几乎所有的控件都有好多代理,只要我们灵活使用,可以很快捷的实现我们的功能需求。拍摄完成后点击图片的代理如下:-(void)imagePickerController:(UIImagePickerController *)picker didFinishPickingImage:为了方便,我还设置了打开和关闭闪光灯的按钮,毕竟夜间拍照也是正常的需求,闪光灯需要用到AVCaptureSession4,具体代码如下:第一步:需要创建协调输入和输出的中心Session:AVCaptureSession *session = AVCaptureSession alloc init;第二步:创建一个Device代表输入设备,闪光灯设备如下:AVCaptureDevice * device = AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo;第三步:设备输入和输出,其中输入需要添加到session中:AVCaptureDeviceInput*input=AVCaptureDeviceInputdeviceInputWithDevice:deviceerror:&error;sessionaddInput:input;/添加输入AVCaptureVideoDataOutput *output = AVCaptureVideoDataOutput allocinit;第四步:设置delegate,最后开始捕捉:sessionstartRunning; /捕捉代码5.7 二维码扫描在生活中,我们越来越多的和二维码打交道,不管是支付宝还是QQ或者微信,二维码对于我们司空见惯,所以我添加了这个工具,它唯一的难点便是调扫描框的大小了,那条扫描线其实也算一个动画效果,我用的是定时器,不断改变扫描线的Y坐标,要实现扫描功能,首先要引入foudation框架,出事捕捉设备,设置其类型为mediaTypeVideo,用captureDevice创建输入流,然后创建媒体输出流,实例化后将输入流添加到会话,创建串行队列7,把输出流最后的结果在代理中实现,一般返回的都是一个http网址的url,在用webview将这个网址打开。二维码扫描除了调用意外,有个难点就是做扫描线的运动,代码如下:-(void)moveScanLayer:(NSTimer*)timer/定时器中扫描线的动画实现方法CGRectframe=_scanLayer.frame;if(_boxView.frame.size.height_scanLayer.frame.origin.y)/判断扫描线的高度frame.origin.y=0; _scanLayer.frame=frame;elseframe.origin.y+=5;UIViewanimateWithDuration:0.1animations:_scanLayer.frame=frame;/设置动画的代码; 5.8 手电筒手机的功能越来越多,几乎所有的手机都自带手电筒功能,在生活中,这是不可缺少的道具,因为手电筒的功能比较单一,设置按钮便可开关手电筒,所以我用scrollview加了一些滚动图片,美化我们的视觉享受。6 系统测试6.1 测试目的在项目功能实现以后,我们便要开始进行系统测试,测试要在早期便开始测,这样可以最大程度的节省时间和精力,软件开发是一项细活,稍不注意的一点小BUG都可能引起系统的全面奔溃,程序可以正常运行绝不等同于程序没有问题,有时为了找出bug,我们需要进行一些极端的测试

温馨提示

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

评论

0/150

提交评论