




已阅读5页,还剩24页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
河北农业大学本科毕业论文(设计) 题目:基于iOS平台的客户端应用之食安检的设计与实现 学 院: 信息科学与技术学院 专业班级: 软件工程1001班 学 二O一四年 五 月 二十九日基于iOS平台的客户端应用之食安检的设计与实现摘 要在我们的生活中,存在着各种各样的食物。在提倡绿色食品、健康食品的今天,还是有一些食品存在严重安全隐患。接连不断发生的恶性食品安全事故却引发了人们对食品安全的高度关注,要重新审视这一已上升到国家公共安全高度的问题,更要加大对食品安全的监管力度。食品安全关系到广大人民群众的身体健康和生命安全,关系到经济健康发展和社会稳定,关系到政府和国家的形象。食品安全已成为衡量人民生活质量、社会管理水平和国家法制建设的一个重要方面。于是一款成熟的食品安全检测的APP的研究与设计开发已经成为了市场不可或缺的一部分,并且有着广阔的发展前景。本次设计项目食安检,基于苹果iOS系统,利用智能手机实现食品安全检测的功能。毕业设计完成时,整个应用界面简单明了,操作简洁。用户不仅能够看到自己购买的食品是否安全、符合国家标准,还能够进行其他产品的搜索,让用户能够对于自己购买的食品吃得舒心,买的放心。本设计所使用的开发环境是Xcode,使用的编程语言是Objective-C。项目主要功能包括产品的展示、搜索以及条形码扫描。关键词:iOS系统; 食品安全; Objective-C语言; 条形码Abstract In our lives , there is a wide variety of foods. In promoting green , healthy food today, there are still some serious food safety hazards . Malignant food safety incidents occurred one after another , but sparked great concern about food safety , to re -examine this had risen to the height of a national public safety issues , but also to increase the food safety supervision. Food safety is related to the health and safety of the masses , related to the healthy economic development and social stability , related to the image of the government and the country. Food safety has become an important aspect of a measure of the quality of peoples lives , social management and the national legal system. So APP research and design to develop a sophisticated food safety testing has become an integral part of the market , and there are broad prospects for development. The design project food security, based on Apples iOS system, using smart phones to achieve food safety testing functions. Upon graduation design is completed , the entire application interface is simple , simple operation. Users can not only see if it is safe to buy their own food , in line with national standards, but also be able to search for other products , allows users to buy their own food to eat for comfort, buy the rest assured . This design is used in the development environment Xcode, the programming language is Objective-C. Project features include display, search and barcode scanning products.Keywords: iOS system; food safety; Objective-C language; barcode目录1 引言11.1 课题的目的和意义11.2 条形码11.3 主要设计内容12 iOS、语言、环境以及所用技术介绍22.1 iOS简介22.2 Objective-C语言22.3 Xcode开发环境22.4 Core Data 数据库22.5 JSON解析32.6 ZBar库条形码扫描33 需求分析43.1 功能性需求43.1.1 功能结构图43.1.2 总体设计53.2 非功能性需求54 详细设计与实现64.1 首页展示设计64.2 详情页面设计74.2.1 商品详情页面设计74.2.2 检测结果页面设计94.2.3 食品认证页面设计104.3 搜索页面设计114.4 分类页面设计144.5 食品扫描页面设计174.6 个人中心页面设计195 测试235.1 首页模块测试235.2 详情模块测试235.3 搜索模块测试235.4 分类模块235.5 食品扫描模块测试235.6 个人中心模块测试236 结束语257 参考文献268 致谢271 引言1.1 课题的目的和意义iOS系统因为其本身的安全性以及较高的市场占有率,对于大学生来讲,从事这个行业的开发具有很大的前景。所以了解iOS开发流程,学会使用Xcode编程工具,掌握iOS开发语言Objective-C,学习iOS应用功能实现以及硬件功能的利用,是我这次选用iOS平台开发食安检的重要原因。社会的发展和科技的进步,虽然为生产出高产的安全、绿色食品提供了支持,但是也给那些生产不安全、危害人体健康的有害食品的不法分子提供了便利,所以进行食品安全检测仍然是一项十分重要的任务。以前,人们就算是对于某种食品的成分以及是否安全持有怀疑的态度,但是因为其不能够实时检测,让很多人都放弃了这个想法,买了很多看似健康,但是实际上却并为通过检测的食品。本次毕业设计的APP食安检,旨在为用户提供一个便利的平台,让用户能够随时的查看自己购买到的商品是否进行了安全检测,是否通过了ISO认证,让用户吃起来更放心。1.2 条形码据中国互联网络中心最新的统计报告(2014年1月),截止2013年12月,我国网民规模达6.18亿,全年共计新增网民5358万人,而新增网民中使用手机上网的比例高达73.3%,移动互联网的时代已经全面到来。随着零售业和消费市场的飞速扩大和发展,以及移动互联网的迅猛发展,在全球范围内,每天需要运用条形码扫描的次数已经超过上亿次。现在有关于条形码扫描的应用移动应用也越来越多,例如我查查、条形码商品比价、马上闪条形码比价等应用。就连微信这样的即时通讯的应用也包含了条形码扫描,可见条形码的应用范围之广。1.3 主要设计内容(1)首页模块:首先以广告栏的形式滚动式展示特色产品,下方展示四个产品专区,以瀑布流方式展示数据。(2)详情模块:该模块主要实现食品详情、检测结果以及食品认证三个界面的数据的展示。食品详情界面展示食品图片、食品名称、食品描述、选择食品批次时间等内容;检测结果界面分三个标签展示三种报告结果,分别为“自检报告”、“送检报告”和“抽检报告”;食品认证页面界面显示所获得的认证图标,点击图标可以查看具体认证信息。(3)搜索模块:该模块主要实现的功能是通过产品名称的模糊搜索进行产品列表的展示。(4)分类模块:该模块主要实现的功能是实现产品的两级分类展示,当点击二级分类时,可以跳转到搜索界面进行搜索。(5)食品扫描模块:该模块主要实现的功能是通过开启摄像头进行条形码的扫描或者手动输入条形码进行产品的搜索。(6)个人中心模块:该模块主要实现的功能是用户的登录、注册、修改密码等功能。2 iOS、语言、环境以及所用技术介绍iOS SDK提供了创建iOS应用程序所需要的环境和工具。利用iOS SDK开发应用时所用的编程语言是Objective-C。下面具体介绍一下iOS、语言、环境以及其他所用技术。2.1 iOS简介iOS是由苹果公司开发的以Darwin为基础的移动操作系统。苹果公司最早于2007年1月9日的Macworld大会上公布这个系统。这个系统最早的用途为iPhone手机,后来陆陆续续的用到了苹果公司的其他产品上。由于用途的逐渐广泛,系统名字也由iPhone OS 更名为iOS。截止2012年9月份,根据友盟给出的数据,目前国内的IOS设备的用户量达到了3500万,App Store上的应用数已经达到了65万,下载量已超过300亿次,平局每天下载量在4600万,而国内占总下载量的20%,中国区下载量每天在1000万次左右。iOS操作采用的是多点触控直接操作,支持多语言。而且因为其硬件和操作系统均由Apple制造,所以具有高度整合性。这样的优势,也是的App能够充分的利用Retina显示屏、加速感应器以及三轴陀螺仪等硬件功能。在iOS及后续版本中,当第三方软件收到了新的信息时,Apple的服务器将把这些通知推送至iPhone、ipad或者是iPod Touch上(无论它运行与否)。2.2 Objective-C语言Objective-C,是一种扩充C的面向对象编程语言,主要用于Mac OS X和GNUstep这两个使用OpenStep标准的系统。Objective-C在最开始的时候是不支持垃圾回收的,之所以这样做的是为了避免出现和Smalltalk一样出现漫长的死亡时间,导致整个系统失去功用的现象。但是在Xcode4以及后续的版本就已经具备了ARC机制,实现了自动释放功能。Objective-C不支持运算子多载,这一点是和C+所不一样的。而且Objective-C只容许对象继承一个类别,支持动态运行时。但是其也有很多弊端,就拿编译时的性能优化方法来讲,很多都是不能应用于Objective-C,内联函数就是一个很常见的例子。2.3 Xcode开发环境Xcode是开发苹果应用程序的必备开发环境。自动Xcode4开始,开发人员就可以利用Xcode开发基于iOS的iPad、iPhone、iPod Touch设备应用程序。Xcode不仅编译速度快,而且支持很多中的编程语言,比如C、C+、Objective-C。2.4 Core Data 数据库Core Data拥有成熟的代码,这些代码通过单元测试来保证品质。应用Core Data的程序每天被世界上几百万用户使用。通过了几个版本的发布,已经被高度优化。它能利用Model层的信息和运行时的特性,而不通过程序层的代码实现。除了提供强大的安全支持和错误处理外,它还提供了最优的内存扩展性,可实现有竞争力的解决方案。除了Core Data本身的优点之外,使用它还有其他的好处:它很容易和Mac OS X系统的Tool chain集成;利用Model设计工具可以按图形化方式轻松创建数据库的结构;你可以用Instruments的相关模板来测试Core Data的效率并debug。在Mac OS X的桌面程序中,Core Data还和Interface Builder集成。通过Core Data管理应用程序的数据模型,可以极大程度减少需编写的代码数量。Core Data还具有下述特征:第一,将对象数据存储在SQLite数据库以获得性能优化。第二,提供NSFetchedResultsController类用于管理表视图的数据。即将Core Data的持久化存储显示在表视图中,并对这些数据进行管理:增、删,改。第三,管理undo/redo操作。检查托管对象的属性值是否正确。2.5 JSON解析JSON(Javascript Object Notation)是一种轻量级的,以文字为基础,且易于让人阅读。尽管JSON是在Javascript的一个子集,但JSON是独立于语言的文本格式,并且采用了类似于C语言家族的一些习惯。JSON用于描述数据结构,有以下形式存在:对象(object):一个对象以“”开始,并以“”结束。一个对象包含一系列非排序的名称/值对,每个名称/值对之间使用“,”分割。名称/值对(collection):名称和值之间使用“:”隔开,一般的形式是:name:value,一个名称是一个字符串,一个值可以是一个字符串、一个数值、一个对象、一个布尔值、一个有序列表或者一个null值。值的有序列表(array):一个或者多个值用“,”分割后,使用“”,“”括起来就形成了这样的列表,形如:collection,collecton。字符串:以“”括起来的一串字符。数值:一系列0-9的数字组合,可以为负数或者小数,还可以用“e”或者“E”表示为指数形式。布尔值:表示为true或者false。2.6 ZBar库条形码扫描ZBar是款桌面电脑用条形码/二维码扫描工具,支持摄像头及图片扫描,支持多平台包括 iPhone 手机。同时ZBar提供了二维码扫描的 API 开发包。例子分析:第一,导入和使用SDK,导入ZBarSDK文件并引入一下框架AVFoundation.framework(weak)CoreMedia.framework(weak)CoreVideo.framework(weak)QuartzCore.frameworklibiconv.dylib。最后,引入头文件#import “ZBarSDK.h” 即可使用。第二,ReaderSample使用了ZBarReaderViewController,该类实现了自动捕捉条形码,设置了ZBarReaderViewController属性scanner的配置。找到条形码时,会执行代理方法-(void)imagePickerController:(UIImagePickerController*)readerdidFinishPickingMediaWithInfo:(NSDictionary*) info最后读取并显示了条形码的图片和内容。第三,EmbedReader使用了ZBarReaderView,该类实现了使用摄像头捕捉条形码,调用start方法开始捕捉,调用stop方法停止捕捉。当捕捉到条形码时,会调用代理方法:- (void) readerView:(ZBarReaderView*)readerViewdidReadSymbols:(ZBarSymbolSet*)symbolsfromImage:(UIImage*)image常用类分析:第一,ZBarReaderViewController用于动态捕捉条形码;scanner用于配置捕获图像的属性;cameraDevice用于设置前后置摄像头;代理方法- (void) readerView:(ZBarReaderView*)readerViewdidReadSymbols:(ZBarSymbolSet*)symbolsfromImage:(UIImage*)image在捕获到条形码后执行第二,ZBarReaderController继承UIImagePickerController,用于手动捕捉条形码sourceType用于图片获取方式,摄像头或相册方法takePicture获取图片,并从图片中捕获条形码代理方法-(void)imagePickerController:(UIImagePickerController*)picker didFinishPickingMediaWithInfo:(NSDictionary*)info,在读取条形码后执行,info包含了条形码信息。3 需求分析从项目开发的角度看,软件需求包括两大类型:功能性需求和非功能性需求。其中功能性需求是最主要的需求,是需要计算机系统解决的问题,也是对数据处理的要求。功能需求规定了系统必须执行的功能。非功能性需求是一些限制性要求,是对实际使用环境所做的要求,如可靠性要求、性能要求等。非功能性需求比功能性需求要求更严格,更不容易满足,因为如果非功能性需求不能满足的话,系统将无法运行。食安检客户端的需求主要从功能性需求和非功能性需求两方面分析。3.1 功能性需求3.1.1 功能结构图3.1.2 总体设计按照功能分为六大功能,如下表:表3-2-2 程序功能表模块简述功能描述首页APP首页,展示分两个区域,上方展示特色产品,以广告条方式展示,下方展示四个产品专区,以瀑布流方式展示数据详情展示食品的详细信息,检测结果,食品认证信息。用户可以通过食品的详细信息可以查看食品的名称,描述信息和营养含量;用户可以通过检测结果查看自检报告,抽检报告和送检报告;用户可以通过食品认证界面查看该食品所获的的ISO认证搜索可以根据用户需求搜索关键字,通过输入产品名搜索特定的食品信息。点击取消搜索可以显示搜索的历史纪录。分类查看所有食品的一级分类和二级分类,当点击二级分类的子分类的时候,可以查看此分类的所有产品的信息食品扫描可以通过条形码扫描查看食品的信息个人中心显示用户的信息以及历史纪录等。3.2 非功能性需求非功能性需求对用户的操作体验起着重要作用,本应用对非功能性需求也是很重视的。为了能够加强用户的体验,对于本应用做了很多的优化。非功能性需求主要有:(1)操作流畅性:比如说在页面数据加载的时候,要能够首先显示页面,然后再进行数据的逐步显示,不应该出现黑屏等现象,保证操作的流畅性;(2)启动时间:应用启动时间应尽可能短,加载时间太长不利于用户感受;(3)美观性:每个界面尽量让UI设计师设计好,要给用户美的享受。4 详细设计与实现根据需求分析,划分了六大功能模块,其中详情模块、扫描模块和搜索模块是本软件的特色及关键部分,具体功能如下所示:4.1 首页展示设计下图4-1为首页界面,展示分两个区域。上方展示特色产品,以广告栏的方式展示。其中广告栏的实现就是通过使用继承与UIView,并且实现了UIScrollViewDelegate协议的SGFocusImageFrame以及NSTimer来实现特色产品的轮播。下方展示四个产品专区,分别使用了两个UIScrollView来实现四个专区的切换,使用了四个UITableView来展示某一个专区的产品的显示,并且前两个UITableView和后两个UITableView实现通过联动实现了瀑布流的方式。导航栏右上方为搜索按钮,点击后进入“搜索”界面。点击产品专区中的具体产品,进入“食品详情”页面,并且此内容会存储到数据库中,可以在个人中心界面的“历史记录”中查看此记录。图4-1 首页视图以下代码为广告栏特色产品轮播的代码:- (void)setupViews/这里为广告栏的数据arr = NSMutableArray array;arraddObject:SGFocusImageItemalloc initWithImage:UIImageimageNamed:lgd4.png tag:0;for (inti = 0; i 4; i+) NSString *str = NSStringstringWithFormat:lgd%d.png,i+1;SGFocusImageItem *item1 = SGFocusImageItemalloc initWithImage:UIImageimageNamed:str tag:i+1;arr addObject:item1; arraddObject:SGFocusImageItemalloc initWithImage:UIImageimageNamed:lgd1.png tag:5;imageFrame = SGFocusImageFramealloc initWithFrame:CGRectMake(0, 0, self.view.bounds.size.width,SGFOCUSIMAGEFRAME_HEIGHT) delegate:selfimageItems:arr;self.viewaddSubview:imageFrame;/这里为广告栏的图片id_imageIdArr = 10143,12070,10101,158,10143,12070;4.2 详情页面设计详情页面主要分为四个页面,包括商品详情、检测结果、食品认证和小知识库界面。其中小知识库界面尚未完善。详情页面使用的是四个UIButton的切换来实现UIScrollView下的四个界面的切换。4.2.1 商品详情页面设计下图4-2-1和4-2-2是商品详情界面。商品详情页面整体界面使用的是UITableView,其中每一个栏目都是一个UITableViewCell。 图4-2-1 商品详情界面(上) 图4-2-2 商品详情界面(下) 食品信息的cell包括食品的图片和食品的名称,其中食品的图片使用ZoomImageView来实现,并且通过_fooImageViewsetImageWithUrl:NSURL URLWithString:saveString来实现对于图片的缓存,当下次再次进入这个界面的时候不需要再次加载图片。而且当点击食品的图片时,可以放大图片。食品描述信息使用的是置于UITableViewCell的UILabel进行显示。而且可以根据解析出来的描述信息的内容的多少来自动适应UILabel,进而自动适应UITableViewCell。食品的主要成分和使用人群与食品的描述信息相同,可以根据具体的内容的多少来自动的调整整个UITableViewCell的高度。 食品批次信息是由继承于UITableViewCell的BatchInfoCell来实现的。其中BatchInfoCell包括点击输入产品批次日期的UITextField、选择日期的UIButton以及通过选择的日期计算是否过期以及是否有对应日期的自检报告。当点击UITextField或者是UIButton都会弹出一个UIActionSheet,其中UIActionSheet包含一个UIDatePicker可以进行日期的选择。当选择完日期后点击确定就会进行日期的计算(如图4-2-3),并且会根据获得内容自动的调整UILabel的大小,调整BatchInfoCell的高度。其中根据具体内容计算UILabel大小的代码如下:- (void)layoutSubviews superlayoutSubviews;if (_foodDetailModel.datetime.length 0) _infoLabel = UILabelalloc initWithFrame:CGRectZero;_infoLabel.numberOfLines = 0;_infoLabel.font = UIFont systemFontOfSize:14;selfaddSubview:_infoLabel;_infoLabel.text = _foodDetailModel.datetime;CGSize size;size = UIUtilsgetSizeWithLabel:_foodDetailModel.datetimewithFont:UIFont systemFontOfSize:14withSize:CGSizeMake(kScreenWidth-6, kScreenHeight);_infoLabel.frame = CGRectMake(3, _dateTextField.bottom+10, kScreenWidth-6,size.height);_dateTextField.text = _foodDetailMductDate;图4-2-3 选择日期后的效果 营养含量是由继承于UITableViewCell的NutritionCell来实现的。其中五个圆环分别为能量、蛋白质、脂肪、碳水化合物以及钠,而每一个圆环中的不同深浅度表示了每种物质的营养含量百分比。表示百分比的部分代码为:- (void)setPercent:(int)percent animated:(BOOL)animated CGFloatfloatPercent = percent / 100.0;floatPercent = MIN(1, MAX(0, floatPercent); percentLayer.percent = floatPercent;percentLayer.color1 = _leftColor;percentLayer.color2 = _rightColor;selfsetNeedsLayout;percentLayersetNeedsDisplay;selfmoveThumbToPosition:floatPercent * (2 * M_PI) - (M_PI/2);4.2.2 检测结果页面设计 下图4-2-4为检测结果页面。首先此页面包含三个UIButton的UISegmentControl、显示批次信息的UILabel、显示报告的三个栏目的UILabel、显示报告具体结果的UITableView和显示自检报告、送检报告和送检报告PDF的UIButton。 其中UISegmentControl默认选中第一个Item,显示批次信息的UILabel会根据选择日期得到的信息来进行显示。UITableView的具体内容以及显示报告PDF的UIButton内容根据选择的Item进行改变。下面主要展示显示PDF的代码:- (void)viewDidLoadsuperviewDidLoad;/ Do any additional setup after loading the view.webview = UIWebViewalloc initWithFrame:CGRectMake(0, 0, kScreenWidth, kScreenHeight - 64);NSURLRequest *request = NSURLRequestrequestWithURL:NSURL URLWithString:self.urlStr;webview.delegate = self;webview.scalesPageToFit = YES;webviewloadRequest:request;self.viewaddSubview:webview;self showHUD:正在加载.;图4-2-4 检测结果页面4.2.3 食品认证页面设计图4-2-5为食品认证页面。食品认证界面主要展示食品所获得的认证图标,使用的是UITableView进行展示。每一个UITableViewCell包含两个UIButton,每个UIButton上分别包含一个用来显示认证图标的名称的UILabel和认证图标的ZoomImageView。当点击ZoomImageView,可以放大查看所对应的具体的pdf文件。关于UITableViewCell的布局以及显示代码如下:- (void)layoutSubviews superlayoutSubviews; NSString *saveString;if (!_leftCerModel.imgUrlisEqual:NSNull null _leftCerModel.imgUrl.length 0) saveString = _leftCerModel.imgUrl; _leftImageViewsetImageWithURL:NSURL URLWithString:_leftCerModel.imgUrl;if (!_leftCerModel.documentUrlisEqual:NSNull null _leftCerModel.documentUrl.length 0) _leftImageViewaddZoom:_leftCerModel.documentUrl;_leftZoomImageaddZoom:_leftCerModel.documentUrl; if (!_rightCerModel.imgUrlisEqual:NSNull null _rightCerModel.imgUrl.length 0) saveString = _rightCerModel.imgUrl;_rightImageViewsetImageWithURL:NSURL URLWithString:_rightCerModel.imgUrl;if (!_rightCerModel.documentUrlisEqual:NSNull null _rightCerModel.documentUrl.length 0) _rightImageViewaddZoom:_rightCerModel.documentUrl; _rightZoomImageaddZoom:_rightCerModel.documentUrl;self.leftNameLabel.text = _leftCerM;self.rightNameLabel.text = _rightCerM;图4-2-5 食品认证页面4.3 搜索页面设计图4-3-1为搜索界面。最上方的UINavigationBar的LeftBarButtonItem功能是返回到首界面,RightBarButtonItem是分类按钮,点击此按钮,可以跳转到分类界面。图4-3-1 为搜索界面UINavigationBar下方为搜索框和一个点击取消的UIButton。当输入完内容点击键盘上的“Search”键就会请求接口进行后台数据的搜索,后台会将搜索到的内容返回,如果有内容,那么就用UITableView来显示所有的产品列表。此列表的每一个UITableViewCell都包括三个内容:食品的图片、食品的名称以及食品的适合人群。显示搜索结果的UITableView具有上拉加载更多和下拉重新请求数据刷新界面的功能。其机制主要是通过计算ContentOffSet.y和ContentSize来判断是否进行了上拉和下拉的操作,如果进行了其中某一个操作那么就通知UITableView进行相应的操作。点击取消的按钮,就会取消当前的搜索,显示之前的搜索内容(如图4-3-2)。图4-3-2 搜索历史界面当点击取消的按钮后所显示的搜索历史记录是通过coreData进行数据管理的。此历史记录包括搜索时间和搜索的名字,通过如下代码将所有的数据查询出来,并且通过UITableView进行展示。当点击“清除历史记录”的UIButton时,会触发-(BOOL)deleteHistoryAllRecordData方法,并且同时使用_historyTableView reloaData方法进行界面刷新。具体的HistoryRecordCoreData类的存储、查询和删除代码如下:- (BOOL)addHistoryRecordData:(HistoryRecord *)historyRecordif (historyRecord = nil) return NO; coreData.managedObjectContextinsertObject:historyRecord;return coreData.managedObjectContextsave:nil;- (BOOL)deleteHistoryAllRecordDataNSArray *allData = self findAllHistoryRecord;for (HistoryRecord *history in allData) if (history != nil) /删除coreData.managedObjectContextdeleteObject:history;/将数据同步到文件中coreData.managedObjectContextsave:nil;return YES;- (NSArray *)findAllHistoryRecord/1:创建实体描述对象NSEntityDescription *entify = NSEntityDescriptionentityForName:HistoryRecord inManagedObjectContext:coreData.managedObjectContext;/2:创建查询对象NSFetchRequest *request = NSFetchRequestalloc init;requestsetEntity:entify;/3:查询用户NSArray *lines = coreData.managedObjectContextexecuteFetchRequest:requesterror:nil;return lines;4.4 分类页面设计图4-4-1为一级分类的界面。一级分类的界面由UITableView构成,每一个UITableViewCell显示的为每一类的图标和名称。当点击每一个UITableVIewCell或者是向左滑动时,就会显示出对应类的二级分类。之所以会出现这样的效果是因为在此UITablView上添加了UISwipeGestureRecognizer手势,并且定义了手势的方向为UISwipeGestureRecognizerDirectionLeft(此枚举表示可识别的手势方向为向左)和UISwipeGestureRecognizerDirectionRight(此枚举表示可识别的方向为向右)。当向右滑动时,就会隐藏二级分类。图4-4-1 一级分类界面图4-4-2为点击了一级分类(肉及肉制品分类)显示出二级分类界面的效果。二级界面也是使用UITableView进行显示的。但是使用-(UIView*)tableView:(UITableView*)tableViewviewForHeaderInSection:(NSInteger)section来表示二级主分类视图,使用UITableViewCell来表示二级子分类。当点击某一个二级子分类时,就会跳转回搜索界面,自动在搜索框显示二级子分类的内容,并且自动进行搜索。图4-4-2 显示二级子分类的界面下面为显示和隐藏二级子界面的代码:/展开右边的tableView- (void)zoomInRightTabelViewUIView animateWithDuration:0.2 animations:_bottomView.left = -kScreenWidth/4;_isStrech = YES; completion:(BOOL finished) UIView animateWithDuration:0.09 animations:_rightTableView.left = kScreenWidth*7.0/12; _markImageView.right = _rightTableView.left; completion:(BOOL finished) ;/收起右边的tableView- (void)zoonOutRightTabelView UIView animateWithDuration:0.2 animations:_bottomView.left = 0;_isStrech = NO; completion:(BOOL finished) UIView animateWithDuration:0.09 animations:_rightTableView.left = kScreenWidth;_markImageView.left = _leftTableView.right - 25;4.5 食品扫描页面设计下图4-5-1为没有物品置于扫描界面,食品扫描页面的状态。图4-5-2为有条形码置于扫描界面时,扫描界面锁定扫描的物品时的装填。 图4-5-1 没有物品置于扫描界面的状态 图4-5-2 有条形码置于扫描界面的状态首先最主要的扫描功能的实现是通过ZBar库中的ZBarReadrView来实现的。先判断当前的设备是否支持摄像头,如果不支持那么提示用户当前设备不支持扫描,如果支持那么就初始化一个ZBarReaderView的对象,然后设置此对象的代理为当前的ViewController。再调用此- (void) readerView: (ZBarReaderView*) readerViewdidReadSymbols: (ZBarSymbolSet*) symbolsfromImage: (UIImage*) image代理方法,当监控到有条形码在摄像头下,那么就会通过constzbar_symbol_t *symbol = zbar_symbol_set_first_symbol(symbols.zbarSymbolSet);NSString *symbolStr = NSString stringWithUTF8String: zbar_symbol_get_data(symbol);这两句代码获取到条形码的编码,然后将定时器销毁,使扫描条不再晃动。之后用此条形码的编码进行数据请求,如果请求到有数据,那么就跳转到商品详情页面,显示食品的具体信息;如果没有数据那么就弹出一个UIAlertView提示用户,没有此产品的信息。点击确定,用户重新进行扫描商品。扫描界面由上至下,分别为写有“将条形码图像置于矩形方框内、离手机摄像头10CM左右,系统就会自动识别”的UILabel,以及一个UIImageView的白色扫描框和一个由UIImageView组成的绿色扫描条、一个由UIButton实现的手动输入按钮。UIImageview实现的扫描条,为了让扫描条效果更加逼真,实现来回晃动的效果,开启一个NSTimer定时器,首先让扫描条置于最上方,然后upOrdown的状态置为NO,表示扫描条处于向下扫描状态,当扫描条的y值为390时,将upOrdown的状态置为YES,使得扫描条向上运动。这样循环往复,就形成了扫描条不断上下扫描的状态。最下边的UIButton点击可以进入到输入条形码的界面。在此界面包括一个输入条形码的UITextField和一个确定、取消的UIButton。当输入完毕条形码,点击确定的UIButton,可以进行数据请求;点击取消按钮直接返回到扫描界面。在此界面加入了UITapGestureRecognizer手势,当点击屏幕的时候,会隐藏UINavigationBar和UITabBar;再次点击又会显示出来。具体代码如下:- (void)viewDidLoad superviewDidLoad; self initTitleViewWithTitle:扫描;self.navigationItem.leftBarButtonItem = nil;self.view.backgroundColor = UIColorwhiteColor;/创建扫描视图readview = ZBarReaderView new; / 初始化readview.backgroundColor = UIColorbl
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025兴业银行三明分行零售业务团队招聘笔试备考试题及答案解析
- 国家开发银行2026年校园招聘笔试模拟试题及答案解析
- 2025福建省轻安工程建设有限公司秋季招聘5人笔试模拟试题及答案解析
- 2025海南海口市美兰区白龙街道办事处招聘公益性岗位人员2人笔试模拟试题及答案解析
- 2025重庆市奉节县事业单位面向服务期满且考核合格“三支一扶”人员招聘工作人员26人笔试模拟试题及答案解析
- 2026中国邮政储蓄银行望江县支行校园招聘笔试备考试题及答案解析
- 2026中国华能华能左权煤电有限责任公司校园招聘笔试模拟试题及答案解析
- 2025广西柳州市社会福利医院编外聘用人员招聘19人笔试参考题库附答案解析
- 2025河南郑州惠济区卫生健康系统卫生专业人才引进及特岗全科医生、特招医学院校毕业生引进41人笔试模拟试题及答案解析
- 2026华能(苏州工业园区)发电有限责任公司应届高校毕业生招聘(江苏)笔试模拟试题及答案解析
- GB/T 45870.1-2025弹簧测量和试验参数第1部分:冷成形圆柱螺旋压缩弹簧
- 数据备份课件
- 银行集团管理办法
- 人行国内证管理办法
- 电厂钢结构安装方案(3篇)
- 部编版六年级下册语文小升初《词语积累与运用》专项检测卷 含答案
- 残运会应急预案管理办法
- 小儿急性阑尾炎护理查房
- T/SFABA 2-2016食品安全团体标准食品配料焙烤食品预拌粉
- 村集体合作入股协议书
- A-Level化学(A2)2024-2025年有机合成与分析化学深度学习试题
评论
0/150
提交评论