2023年全國碩士研究生考試考研英語一試題真題(含答案詳解+作文范文)_第1頁
已閱讀1頁,還剩28頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

1、<p><b>  本科畢業(yè)論文</b></p><p><b> ?。?0 屆)</b></p><p>  基于iOS平臺的客戶端應用之食安檢的設計與實現(xiàn)</p><p>  基于iOS平臺的客戶端應用之食安檢的設計與實現(xiàn)</p><p><b>  摘 要</b&

2、gt;</p><p>  在我們的生活中,存在著各種各樣的食物。在提倡綠色食品、健康食品的今天,還是有一些食品存在嚴重安全隱患。接連不斷發(fā)生的惡性食品安全事故卻引發(fā)了人們對食品安全的高度關注,要重新審視這一已上升到國家公共安全高度的問題,更要加大對食品安全的監(jiān)管力度。食品安全關系到廣大人民群眾的身體健康和生命安全,關系到經(jīng)濟健康發(fā)展和社會穩(wěn)定,關系到政府和國家的形象。食品安全已成為衡量人民生活質(zhì)量、社會管理水平

3、和國家法制建設的一個重要方面。于是一款成熟的食品安全檢測的APP的研究與設計開發(fā)已經(jīng)成為了市場不可或缺的一部分,并且有著廣闊的發(fā)展前景。</p><p>  本次設計項目食安檢,基于蘋果iOS系統(tǒng),利用智能手機實現(xiàn)食品安全檢測的功能。畢業(yè)設計完成時,整個應用界面簡單明了,操作簡潔。用戶不僅能夠看到自己購買的食品是否安全、符合國家標準,還能夠進行其他產(chǎn)品的搜索,讓用戶能夠?qū)τ谧约嘿徺I的食品吃得舒心,買的放心。<

4、;/p><p>  本設計所使用的開發(fā)環(huán)境是Xcode,使用的編程語言是Objective-C。項目主要功能包括產(chǎn)品的展示、搜索以及條形碼掃描。</p><p>  關鍵詞:iOS系統(tǒng); 食品安全; Objective-C語言; 條形碼</p><p><b>  Abstract</b></p><p>  In our

5、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

6、 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 , rela

7、ted to the healthy economic development and social st</p><p>  Keywords: iOS system; food safety; Objective-C language; barcode</p><p><b>  目錄</b></p><p><b>  1 引言

8、1</b></p><p>  1.1 課題的目的和意義1</p><p><b>  1.2 條形碼1</b></p><p>  1.3 主要設計內(nèi)容1</p><p>  2 iOS、語言、環(huán)境以及所用技術介紹2</p><p>  2.1 iOS簡介2</p&

9、gt;<p>  2.2 Objective-C語言2</p><p>  2.3 Xcode開發(fā)環(huán)境2</p><p>  2.4 Core Data 數(shù)據(jù)庫2</p><p>  2.5 JSON解析3</p><p>  2.6 ZBar庫——條形碼掃描3</p><p><b>

10、;  3 需求分析4</b></p><p>  3.1 功能性需求4</p><p>  3.1.1 功能結構圖4</p><p>  3.1.2 總體設計5</p><p>  3.2 非功能性需求5</p><p>  4 詳細設計與實現(xiàn)6</p><p>  4

11、.1 首頁展示設計6</p><p>  4.2 詳情頁面設計7</p><p>  4.2.1 商品詳情頁面設計7</p><p>  4.2.2 檢測結果頁面設計9</p><p>  4.2.3 食品認證頁面設計10</p><p>  4.3 搜索頁面設計11</p><p>

12、;  4.4 分類頁面設計14</p><p>  4.5 食品掃描頁面設計17</p><p>  4.6 個人中心頁面設計19</p><p><b>  5 測試23</b></p><p>  5.1 首頁模塊測試23</p><p>  5.2 詳情模塊測試23</p&

13、gt;<p>  5.3 搜索模塊測試23</p><p>  5.4 分類模塊23</p><p>  5.5 食品掃描模塊測試23</p><p>  5.6 個人中心模塊測試23</p><p><b>  6 結束語25</b></p><p><b> 

14、 7 參考文獻26</b></p><p><b>  8 致謝27</b></p><p><b>  1 引言</b></p><p>  1.1 課題的目的和意義</p><p>  iOS系統(tǒng)因為其本身的安全性以及較高的市場占有率,對于大學生來講,從事這個行業(yè)的開發(fā)具有很大的

15、前景。所以了解iOS開發(fā)流程,學會使用Xcode編程工具,掌握iOS開發(fā)語言Objective-C,學習iOS應用功能實現(xiàn)以及硬件功能的利用,是我這次選用iOS平臺開發(fā)食安檢的重要原因。</p><p>  社會的發(fā)展和科技的進步,雖然為生產(chǎn)出高產(chǎn)的安全、綠色食品提供了支持,但是也給那些生產(chǎn)不安全、危害人體健康的有害食品的不法分子提供了便利,所以進行食品安全檢測仍然是一項十分重要的任務。以前,人們就算是對于某種食

16、品的成分以及是否安全持有懷疑的態(tài)度,但是因為其不能夠?qū)崟r檢測,讓很多人都放棄了這個想法,買了很多看似健康,但是實際上卻并為通過檢測的食品。</p><p>  本次畢業(yè)設計的APP——食安檢,旨在為用戶提供一個便利的平臺,讓用戶能夠隨時的查看自己購買到的商品是否進行了安全檢測,是否通過了ISO認證,讓用戶吃起來更放心。</p><p><b>  1.2 條形碼</b>

17、;</p><p>  據(jù)中國互聯(lián)網(wǎng)絡中心最新的統(tǒng)計報告(2014年1月),截止2013年12月,我國網(wǎng)民規(guī)模達6.18億,全年共計新增網(wǎng)民5358萬人,而新增網(wǎng)民中使用手機上網(wǎng)的比例高達73.3%,移動互聯(lián)網(wǎng)的時代已經(jīng)全面到來。</p><p>  隨著零售業(yè)和消費市場的飛速擴大和發(fā)展,以及移動互聯(lián)網(wǎng)的迅猛發(fā)展,在全球范圍內(nèi),每天需要運用條形碼掃描的次數(shù)已經(jīng)超過上億次?,F(xiàn)在有關于條形碼掃

18、描的應用移動應用也越來越多,例如我查查、條形碼商品比價、馬上閃條形碼比價等應用。就連微信這樣的即時通訊的應用也包含了條形碼掃描,可見條形碼的應用范圍之廣。</p><p>  1.3 主要設計內(nèi)容</p><p> ?。?)首頁模塊:首先以廣告欄的形式滾動式展示特色產(chǎn)品,下方展示四個產(chǎn)品專區(qū),以瀑布流方式展示數(shù)據(jù)。</p><p> ?。?)詳情模塊:該模塊主要實現(xiàn)

19、食品詳情、檢測結果以及食品認證三個界面的數(shù)據(jù)的展示。食品詳情界面展示食品圖片、食品名稱、食品描述、選擇食品批次時間等內(nèi)容;檢測結果界面分三個標簽展示三種報告結果,分別為“自檢報告”、“送檢報告”和“抽檢報告”;食品認證頁面界面顯示所獲得的認證圖標,點擊圖標可以查看具體認證信息。</p><p> ?。?)搜索模塊:該模塊主要實現(xiàn)的功能是通過產(chǎn)品名稱的模糊搜索進行產(chǎn)品列表的展示。</p><p&

20、gt;  (4)分類模塊:該模塊主要實現(xiàn)的功能是實現(xiàn)產(chǎn)品的兩級分類展示,當點擊二級分類時,可以跳轉(zhuǎn)到搜索界面進行搜索。</p><p> ?。?)食品掃描模塊:該模塊主要實現(xiàn)的功能是通過開啟攝像頭進行條形碼的掃描或者手動輸入條形碼進行產(chǎn)品的搜索。</p><p>  (6)個人中心模塊:該模塊主要實現(xiàn)的功能是用戶的登錄、注冊、修改密碼等功能。</p><p>  2

21、 iOS、語言、環(huán)境以及所用技術介紹</p><p>  iOS SDK提供了創(chuàng)建iOS應用程序所需要的環(huán)境和工具。利用iOS SDK開發(fā)應用時所用的編程語言是Objective-C。下面具體介紹一下iOS、語言、環(huán)境以及其他所用技術。</p><p><b>  2.1 iOS簡介</b></p><p>  iOS是由蘋果公司開發(fā)的以Dar

22、win為基礎的移動操作系統(tǒng)。蘋果公司最早于2007年1月9日的Macworld大會上公布這個系統(tǒng)。這個系統(tǒng)最早的用途為iPhone手機,后來陸陸續(xù)續(xù)的用到了蘋果公司的其他產(chǎn)品上。由于用途的逐漸廣泛,系統(tǒng)名字也由iPhone OS 更名為iOS。截止2012年9月份,根據(jù)友盟給出的數(shù)據(jù),目前國內(nèi)的IOS設備的用戶量達到了3500萬,App Store上的應用數(shù)已經(jīng)達到了65萬,下載量已超過300億次,平局每天下載量在4600萬,而國內(nèi)占總

23、下載量的20%,中國區(qū)下載量每天在1000萬次左右。</p><p>  iOS操作采用的是多點觸控直接操作,支持多語言。而且因為其硬件和操作系統(tǒng)均由Apple制造,所以具有高度整合性。這樣的優(yōu)勢,也是的App能夠充分的利用Retina顯示屏、加速感應器以及三軸陀螺儀等硬件功能。在iOS及后續(xù)版本中,當?shù)谌杰浖盏搅诵碌男畔r,Apple的服務器將把這些通知推送至iPhone、ipad或者是iPod Touch

24、上(無論它運行與否)。</p><p>  2.2 Objective-C語言</p><p>  Objective-C,是一種擴充C的面向?qū)ο缶幊陶Z言,主要用于Mac OS X和GNUstep這兩個使用OpenStep標準的系統(tǒng)。</p><p>  Objective-C在最開始的時候是不支持垃圾回收的,之所以這樣做的是為了避免出現(xiàn)和Smalltalk一樣出現(xiàn)

25、漫長的死亡時間,導致整個系統(tǒng)失去功用的現(xiàn)象。但是在Xcode4以及后續(xù)的版本就已經(jīng)具備了ARC機制,實現(xiàn)了自動釋放功能。</p><p>  Objective-C不支持運算子多載,這一點是和C++所不一樣的。而且Objective-C只容許對象繼承一個類別,支持動態(tài)運行時。但是其也有很多弊端,就拿編譯時的性能優(yōu)化方法來講,很多都是不能應用于Objective-C,內(nèi)聯(lián)函數(shù)就是一個很常見的例子。</p>

26、;<p>  2.3 Xcode開發(fā)環(huán)境</p><p>  Xcode是開發(fā)蘋果應用程序的必備開發(fā)環(huán)境。自動Xcode4開始,開發(fā)人員就可以利用Xcode開發(fā)基于iOS的iPad、iPhone、iPod Touch設備應用程序。</p><p>  Xcode不僅編譯速度快,而且支持很多中的編程語言,比如C、C++、Objective-C。</p><p

27、>  2.4 Core Data 數(shù)據(jù)庫</p><p>  Core Data擁有成熟的代碼,這些代碼通過單元測試來保證品質(zhì)。應用Core Data的程序每天被世界上幾百萬用戶使用。通過了幾個版本的發(fā)布,已經(jīng)被高度優(yōu)化。它能利用Model層的信息和運行時的特性,而不通過程序?qū)拥拇a實現(xiàn)。除了提供強大的安全支持和錯誤處理外,它還提供了最優(yōu)的內(nèi)存擴展性,可實現(xiàn)有競爭力的解決方案。</p><

28、;p>  除了Core Data本身的優(yōu)點之外,使用它還有其他的好處:它很容易和Mac OS X系統(tǒng)的Tool chain集成;利用Model設計工具可以按圖形化方式輕松創(chuàng)建數(shù)據(jù)庫的結構;你可以用Instruments的相關模板來測試Core Data的效率并debug。在Mac OS X的桌面程序中,Core Data還和Interface Builder集成。</p><p>  通過Core Data

29、管理應用程序的數(shù)據(jù)模型,可以極大程度減少需編寫的代碼數(shù)量。Core Data還具有下述特征:第一,將對象數(shù)據(jù)存儲在SQLite數(shù)據(jù)庫以獲得性能優(yōu)化。第二,提供NSFetchedResultsController類用于管理表視圖的數(shù)據(jù)。即將Core Data的持久化存儲顯示在表視圖中,并對這些數(shù)據(jù)進行管理:增、刪,改。第三,管理undo/redo操作。檢查托管對象的屬性值是否正確。</p><p>  2.5 JS

30、ON解析</p><p>  JSON(Javascript Object Notation)是一種輕量級的,以文字為基礎,且易于讓人閱讀。盡管JSON是在Javascript的一個子集,但JSON是獨立于語言的文本格式,并且采用了類似于C語言家族的一些習慣。</p><p>  JSON用于描述數(shù)據(jù)結構,有以下形式存在:</p><p>  對象(object):

31、一個對象以“{”開始,并以“}”結束。一個對象包含一系列非排序的名稱/值對,每個名稱/值對之間使用“,”分割。</p><p>  名稱/值對(collection):名稱和值之間使用“:”隔開,一般的形式是:{name:value},一個名稱是一個字符串,一個值可以是一個字符串、一個數(shù)值、一個對象、一個布爾值、一個有序列表或者一個null值。</p><p>  值的有序列表(array

32、):一個或者多個值用“,”分割后,使用“[”,“]”括起來就形成了這樣的列表,形如:[collection,collecton]。</p><p>  字符串:以“”括起來的一串字符。</p><p>  數(shù)值:一系列0-9的數(shù)字組合,可以為負數(shù)或者小數(shù),還可以用“e”或者“E”表示為指數(shù)形式。</p><p>  布爾值:表示為true或者false。</p

33、><p>  2.6 ZBar庫——條形碼掃描</p><p>  ZBar是款桌面電腦用條形碼/二維碼掃描工具,支持攝像頭及圖片掃描,支持多平臺包括 iPhone 手機。同時ZBar提供了二維碼掃描的 API 開發(fā)包。例子分析:</p><p>  第一,導入和使用SDK,導入ZBarSDK文件并引入一下框架AVFoundation.framework(weak)?C

34、oreMedia.framework (weak)?CoreVideo.framework (weak)?QuartzCore.framework?libiconv.dylib。最后,引入頭文件#import “ZBarSDK.h” 即可使用。</p><p>  第二,ReaderSample使用了ZBarReaderViewController,該類實現(xiàn)了自動捕捉條形碼,設置了ZBarRe

35、aderViewController屬性scanner的配置。找到條形碼時,會執(zhí)行代理方法-(void)imagePickerController:(UIImagePickerController*)reader didFinishPickingMediaWithInfo:(NSDictionary*) info最后讀取并顯示了條形碼的圖片和內(nèi)容。</p><p>  第三,EmbedReader使用了

36、ZBarReaderView,該類實現(xiàn)了使用攝像頭捕捉條形碼,調(diào)用start方法開始捕捉,調(diào)用stop方法停止捕捉。當捕捉到條形碼時,會調(diào)用代理方法:- (void) readerView:(ZBarReaderView*)readerViewdidReadSymbols:(ZBarSymbolSet*)symbolsfromImage:(UIImage*)image</p><p><b>  常用類

37、分析:</b></p><p>  第一,ZBarReaderViewController用于動態(tài)捕捉條形碼;scanner用于配置捕獲圖像的屬性;cameraDevice用于設置前后置攝像頭;代理方法- (void) readerView:(ZBarReaderView*)readerViewdidReadSymbols:(ZBarSymbolSet*)symbolsfromImage:(UIIma

38、ge*)image在捕獲到條形碼后執(zhí)行</p><p>  第二,ZBarReaderController繼承UIImagePickerController,用于手動捕捉條形碼sourceType用于圖片獲取方式,攝像頭或相冊方法takePicture獲取圖片,并從圖片中捕獲條形碼代理方法-(void)imagePickerController:(UIImagePickerController*)picker d

39、idFinishPickingMediaWithInfo:(NSDictionary*)info,在讀取條形碼后執(zhí)行,info包含了條形碼信息。</p><p><b>  3 需求分析</b></p><p>  從項目開發(fā)的角度看,軟件需求包括兩大類型:功能性需求和非功能性需求。其中功能性需求是最主要的需求,是需要計算機系統(tǒng)解決的問題,也是對數(shù)據(jù)處理的要求。功能需

40、求規(guī)定了系統(tǒng)必須執(zhí)行的功能。非功能性需求是一些限制性要求,是對實際使用環(huán)境所做的要求,如可靠性要求、性能要求等。非功能性需求比功能性需求要求更嚴格,更不容易滿足,因為如果非功能性需求不能滿足的話,系統(tǒng)將無法運行。食安檢客戶端的需求主要從功能性需求和非功能性需求兩方面分析。</p><p><b>  3.1 功能性需求</b></p><p>  3.1.1 功能結構

41、圖</p><p>  3.1.2 總體設計</p><p>  按照功能分為六大功能,如下表:</p><p>  表3-2-2 程序功能表</p><p>  3.2 非功能性需求</p><p>  非功能性需求對用戶的操作體驗起著重要作用,本應用對非功能性需求也是很重視的。為了能夠加強用戶的體驗,對于本應用做

42、了很多的優(yōu)化。</p><p>  非功能性需求主要有:(1)操作流暢性:比如說在頁面數(shù)據(jù)加載的時候,要能夠首先顯示頁面,然后再進行數(shù)據(jù)的逐步顯示,不應該出現(xiàn)黑屏等現(xiàn)象,保證操作的流暢性;(2)啟動時間:應用啟動時間應盡可能短,加載時間太長不利于用戶感受;(3)美觀性:每個界面盡量讓UI設計師設計好,要給用戶美的享受。</p><p><b>  4 詳細設計與實現(xiàn)</b&

43、gt;</p><p>  根據(jù)需求分析,劃分了六大功能模塊,其中詳情模塊、掃描模塊和搜索模塊是本軟件的特色及關鍵部分,具體功能如下所示:</p><p>  4.1 首頁展示設計</p><p>  下圖4-1為首頁界面,展示分兩個區(qū)域。上方展示特色產(chǎn)品,以廣告欄的方式展示。其中廣告欄的實現(xiàn)就是通過使用繼承與UIView,并且實現(xiàn)了UIScrollViewDele

44、gate協(xié)議的SGFocusImageFrame以及NSTimer來實現(xiàn)特色產(chǎn)品的輪播。下方展示四個產(chǎn)品專區(qū),分別使用了兩個UIScrollView來實現(xiàn)四個專區(qū)的切換,使用了四個UITableView來展示某一個專區(qū)的產(chǎn)品的顯示,并且前兩個UITableView和后兩個UITableView實現(xiàn)通過聯(lián)動實現(xiàn)了瀑布流的方式。導航欄右上方為搜索按鈕,點擊后進入“搜索”界面。點擊產(chǎn)品專區(qū)中的具體產(chǎn)品,進入“食品詳情”頁面,并且此內(nèi)容會存儲到

45、數(shù)據(jù)庫中,可以在個人中心界面的“歷史記錄”中查看此記錄。</p><p><b>  圖4-1 首頁視圖</b></p><p>  以下代碼為廣告欄特色產(chǎn)品輪播的代碼:</p><p>  - (void)setupViews</p><p><b>  {</b></p><

46、p>  //這里為廣告欄的數(shù)據(jù)</p><p>  arr = [NSMutableArray array];</p><p>  [arraddObject:[[SGFocusImageItemalloc] initWithImage:[UIImageimageNamed:@"lgd4.png"] tag:0]];</p><p>  f

47、or (inti = 0; i< 4; i++) {</p><p>  NSString *str = [NSStringstringWithFormat:@"lgd%d.png",i+1];</p><p>  SGFocusImageItem *item1 = [[SGFocusImageItemalloc] initWithImage:[UIImageim

48、ageNamed:str] tag:i+1];</p><p>  [arr addObject:item1];</p><p><b>  }</b></p><p>  [arraddObject:[[SGFocusImageItemalloc] initWithImage:[UIImageimageNamed:@"lgd1.pn

49、g"] tag:5]];</p><p>  imageFrame = [[SGFocusImageFramealloc] initWithFrame:CGRectMake(0, 0, self.view.bounds.size.width,SGFOCUSIMAGEFRAME_HEIGHT) delegate:selfimageItems:arr];</p><p>  [sel

50、f.viewaddSubview:imageFrame];</p><p>  //這里為廣告欄的圖片id</p><p>  _imageIdArr = @[@"10143",@"12070",@"10101",@"158",@"10143",@"12070"];<

51、;/p><p><b>  }</b></p><p>  4.2 詳情頁面設計</p><p>  詳情頁面主要分為四個頁面,包括商品詳情、檢測結果、食品認證和小知識庫界面。其中小知識庫界面尚未完善。</p><p>  詳情頁面使用的是四個UIButton的切換來實現(xiàn)UIScrollView下的四個界面的切換。</

52、p><p>  4.2.1 商品詳情頁面設計</p><p>  下圖4-2-1和4-2-2是商品詳情界面。商品詳情頁面整體界面使用的是UITableView,其中每一個欄目都是一個UITableViewCell。</p><p>  圖4-2-1 商品詳情界面(上) 圖4-2-2 商品詳情界面(下)</p><

53、p>  食品信息的cell包括食品的圖片和食品的名稱,其中食品的圖片使用ZoomImageView來實現(xiàn),并且通過[_fooImageViewsetImageWithUrl:[NSURL URLWithString:saveString]]來實現(xiàn)對于圖片的緩存,當下次再次進入這個界面的時候不需要再次加載圖片。而且當點擊食品的圖片時,可以放大圖片。</p><p>  食品描述信息使用的是置于UITableV

54、iewCell的UILabel進行顯示。而且可以根據(jù)解析出來的描述信息的內(nèi)容的多少來自動適應UILabel,進而自動適應UITableViewCell。</p><p>  食品的主要成分和使用人群與食品的描述信息相同,可以根據(jù)具體的內(nèi)容的多少來自動的調(diào)整整個UITableViewCell的高度。</p><p>  食品批次信息是由繼承于UITableViewCell的BatchInfo

55、Cell來實現(xiàn)的。其中BatchInfoCell包括點擊輸入產(chǎn)品批次日期的UITextField、選擇日期的UIButton以及通過選擇的日期計算是否過期以及是否有對應日期的自檢報告。當點擊UITextField或者是UIButton都會彈出一個UIActionSheet,其中UIActionSheet包含一個UIDatePicker可以進行日期的選擇。當選擇完日期后點擊確定就會進行日期的計算(如圖4-2-3),并且會根據(jù)獲得內(nèi)容自動的

56、調(diào)整UILabel的大小,調(diào)整BatchInfoCell的高度。</p><p>  其中根據(jù)具體內(nèi)容計算UILabel大小的代碼如下:</p><p>  - (void)layoutSubviews</p><p><b>  {</b></p><p>  [superlayoutSubviews];</p&

57、gt;<p>  if (_foodDetailModel.datetime.length> 0) {</p><p>  _infoLabel = [[UILabelalloc] initWithFrame:CGRectZero];</p><p>  _infoLabel.numberOfLines = 0;</p><p>  _infoL

58、abel.font = [UIFont systemFontOfSize:14];</p><p>  [selfaddSubview:_infoLabel];</p><p>  _infoLabel.text = _foodDetailModel.datetime;</p><p>  CGSize size;</p><p>  siz

59、e = [UIUtilsgetSizeWithLabel:_foodDetailModel.datetimewithFont:[UIFont systemFontOfSize:14]withSize:CGSizeMake(kScreenWidth-6, kScreenHeight)];</p><p>  _infoLabel.frame = CGRectMake(3, _dateTextField.bottom

60、+10, kScreenWidth-6,size.height);</p><p>  _dateTextField.text = _foodDetailModel.productDate;</p><p><b>  }</b></p><p><b>  }</b></p><p>  圖4-2

61、-3 選擇日期后的效果</p><p>  營養(yǎng)含量是由繼承于UITableViewCell的NutritionCell來實現(xiàn)的。其中五個圓環(huán)分別為能量、蛋白質(zhì)、脂肪、碳水化合物以及鈉,而每一個圓環(huán)中的不同深淺度表示了每種物質(zhì)的營養(yǎng)含量百分比。表示百分比的部分代碼為:</p><p>  - (void)setPercent:(int)percent animated:(BOOL)anim

62、ated {</p><p>  CGFloatfloatPercent = percent / 100.0;</p><p>  floatPercent = MIN(1, MAX(0, floatPercent)); </p><p>  percentLayer.percent = floatPercent;</p><p>  p

63、ercentLayer.color1 = _leftColor;</p><p>  percentLayer.color2 = _rightColor;</p><p>  [selfsetNeedsLayout];</p><p>  [percentLayersetNeedsDisplay];</p><p>  [selfmoveTh

64、umbToPosition:floatPercent * (2 * M_PI) - (M_PI/2)];</p><p><b>  }</b></p><p>  4.2.2 檢測結果頁面設計</p><p>  下圖4-2-4為檢測結果頁面。首先此頁面包含三個UIButton的UISegmentControl、顯示批次信息的UILabel、

65、顯示報告的三個欄目的UILabel、顯示報告具體結果的UITableView和顯示自檢報告、送檢報告和送檢報告PDF的UIButton。</p><p>  其中UISegmentControl默認選中第一個Item,顯示批次信息的UILabel會根據(jù)選擇日期得到的信息來進行顯示。UITableView的具體內(nèi)容以及顯示報告PDF的UIButton內(nèi)容根據(jù)選擇的Item進行改變。</p><p

66、>  下面主要展示顯示PDF的代碼:</p><p>  - (void)viewDidLoad</p><p><b>  {</b></p><p>  [superviewDidLoad];</p><p>  // Do any additional setup after loading the view

67、.</p><p>  webview = [[UIWebViewalloc] initWithFrame:CGRectMake(0, 0, kScreenWidth, kScreenHeight - 64)];</p><p>  NSURLRequest *request = [NSURLRequestrequestWithURL:[NSURL URLWithString:self.u

68、rlStr]];</p><p>  webview.delegate = self;</p><p>  webview.scalesPageToFit = YES;</p><p>  [webviewloadRequest:request];</p><p>  [self.viewaddSubview:webview];</p&

69、gt;<p>  [self showHUD:@"正在加載.."];</p><p><b>  }</b></p><p>  圖4-2-4 檢測結果頁面</p><p>  4.2.3 食品認證頁面設計</p><p>  圖4-2-5為食品認證頁面。食品認證界面主要展示食品所獲得的

70、認證圖標,使用的是UITableView進行展示。每一個UITableViewCell包含兩個UIButton,每個UIButton上分別包含一個用來顯示認證圖標的名稱的UILabel和認證圖標的ZoomImageView。當點擊ZoomImageView,可以放大查看所對應的具體的pdf文件。</p><p>  關于UITableViewCell的布局以及顯示代碼如下:</p><p>

71、;  - (void)layoutSubviews</p><p><b>  {</b></p><p>  [superlayoutSubviews]; </p><p>  NSString *saveString;</p><p>  if (![_leftCerModel.imgUrlisEqual:[NSNu

72、ll null]] && _leftCerModel.imgUrl.length> 0) {</p><p>  saveString = _leftCerModel.imgUrl;</p><p>  [_leftImageViewsetImageWithURL:[NSURL URLWithString:_leftCerModel.imgUrl]];</p&g

73、t;<p><b>  }</b></p><p>  if (![_leftCerModel.documentUrlisEqual:[NSNull null]] && _leftCerModel.documentUrl.length> 0) {</p><p>  [_leftImageViewaddZoom:_leftCerMo

74、del.documentUrl];</p><p>  [_leftZoomImageaddZoom:_leftCerModel.documentUrl];</p><p><b>  } </b></p><p>  if (![_rightCerModel.imgUrlisEqual:[NSNull null]] && _r

75、ightCerModel.imgUrl.length> 0) {</p><p>  saveString = _rightCerModel.imgUrl;</p><p>  [_rightImageViewsetImageWithURL:[NSURL URLWithString:_rightCerModel.imgUrl]];</p><p><b&

76、gt;  }</b></p><p>  if (![_rightCerModel.documentUrlisEqual:[NSNull null]] && _rightCerModel.documentUrl.length> 0) {</p><p>  [_rightImageViewaddZoom:_rightCerModel.documentUrl

77、];</p><p>  [_rightZoomImageaddZoom:_rightCerModel.documentUrl];</p><p><b>  }</b></p><p>  self.leftNameLabel.text = _leftCerModel.name;</p><p>  self.righ

78、tNameLabel.text = _rightCerModel.name;</p><p><b>  }</b></p><p>  圖4-2-5 食品認證頁面</p><p>  4.3 搜索頁面設計</p><p>  圖4-3-1為搜索界面。最上方的UINavigationBar的LeftBarButtonIt

79、em功能是返回到首界面,RightBarButtonItem是分類按鈕,點擊此按鈕,可以跳轉(zhuǎn)到分類界面。</p><p>  圖4-3-1 為搜索界面</p><p>  下方為搜索框和一個點擊取消的UIButton。當輸入完內(nèi)容點擊鍵盤上的“Search”鍵就會請求接口進行后臺數(shù)據(jù)的搜索,后臺會將搜索到的內(nèi)容返回,如果有內(nèi)容,那么就用來顯示所有的產(chǎn)品列表。此列表的每一個都包括三個內(nèi)容:食

80、品的圖片、食品的名稱以及食品的適合人群。顯示搜索結果的具有上拉加載更多和下拉重新請求數(shù)據(jù)刷新界面的功能。其機制主要是通過計算和來判斷是否進行了上拉和下拉的操作,如果進行了其中某一個操作那么就通知進行相應的操作。</p><p>  點擊取消的按鈕,就會取消當前的搜索,顯示之前的搜索內(nèi)容(如圖4-3-2)。</p><p>  圖4-3-2 搜索歷史界面</p><p&

81、gt;  當點擊取消的按鈕后所顯示的搜索歷史記錄是通過coreData進行數(shù)據(jù)管理的。此歷史記錄包括搜索時間和搜索的名字,通過如下代碼將所有的數(shù)據(jù)查詢出來,并且通過UITableView進行展示。當點擊“清除歷史記錄”的UIButton時,會觸發(fā)-(BOOL)deleteHistoryAllRecordData方法,并且同時使用[_historyTableView reloaData]方法進行界面刷新。具體的HistoryRecord

82、CoreData類的存儲、查詢和刪除代碼如下:</p><p>  - (BOOL)addHistoryRecordData:(HistoryRecord *)historyRecord</p><p><b>  {</b></p><p>  if (historyRecord == nil) {</p><p> 

83、 return NO;</p><p><b>  }</b></p><p>  [coreData.managedObjectContextinsertObject:historyRecord];</p><p>  return [coreData.managedObjectContextsave:nil];</p><

84、;p><b>  }</b></p><p>  - (BOOL)deleteHistoryAllRecordData</p><p><b>  {</b></p><p>  NSArray *allData = [self findAllHistoryRecord];</p><p> 

85、 for (HistoryRecord *history in allData) {</p><p>  if (history != nil) {</p><p><b>  //刪除</b></p><p>  [coreData.managedObjectContextdeleteObject:history];</p>&

86、lt;p>  //將數(shù)據(jù)同步到文件中</p><p>  [coreData.managedObjectContextsave:nil];</p><p><b>  }</b></p><p><b>  }</b></p><p>  return YES;</p><

87、p><b>  }</b></p><p>  - (NSArray *)findAllHistoryRecord</p><p><b>  {</b></p><p>  //1:創(chuàng)建實體描述對象</p><p>  NSEntityDescription *entify = [NSEnt

88、ityDescriptionentityForName:@"HistoryRecord" inManagedObjectContext:coreData.managedObjectContext];</p><p>  //2:創(chuàng)建查詢對象</p><p>  NSFetchRequest *request = [[NSFetchRequestalloc] init];

89、</p><p>  [requestsetEntity:entify];</p><p><b>  //3:查詢用戶</b></p><p>  NSArray *lines = [coreData.managedObjectContextexecuteFetchRequest:requesterror:nil];</p>&

90、lt;p>  return lines;</p><p><b>  }</b></p><p>  4.4 分類頁面設計</p><p>  圖4-4-1為一級分類的界面。一級分類的界面由UITableView構成,每一個UITableViewCell顯示的為每一類的圖標和名稱。當點擊每一個UITableVIewCell或者是向左滑動時

91、,就會顯示出對應類的二級分類。之所以會出現(xiàn)這樣的效果是因為在此UITablView上添加了UISwipeGestureRecognizer手勢,并且定義了手勢的方向為UISwipeGestureRecognizerDirectionLeft(此枚舉表示可識別的手勢方向為向左)和UISwipeGestureRecognizerDirectionRight(此枚舉表示可識別的方向為向右)。當向右滑動時,就會隱藏二級分類。</p>

92、<p>  圖4-4-1 一級分類界面</p><p>  圖4-4-2為點擊了一級分類(肉及肉制品分類)顯示出二級分類界面的效果。二級界面也是使用UITableView進行顯示的。但是使用-(UIView*)tableView:(UITableView*)tableViewviewForHeaderInSection:(NSInteger)section來表示二級主分類視圖,使用UITableVi

93、ewCell來表示二級子分類。當點擊某一個二級子分類時,就會跳轉(zhuǎn)回搜索界面,自動在搜索框顯示二級子分類的內(nèi)容,并且自動進行搜索。</p><p>  圖4-4-2 顯示二級子分類的界面</p><p>  下面為顯示和隱藏二級子界面的代碼:</p><p>  //展開右邊的tableView</p><p>  - (void)zoomIn

94、RightTabelView</p><p><b>  {</b></p><p>  [UIView animateWithDuration:0.2 animations:^{</p><p>  _bottomView.left = -kScreenWidth/4;</p><p>  _isStrech = YE

95、S;</p><p>  } completion:^(BOOL finished) {</p><p>  [UIView animateWithDuration:0.09 animations:^{</p><p>  _rightTableView.left = kScreenWidth*7.0/12;</p><p>  _markI

96、mageView.right = _rightTableView.left;</p><p>  } completion:^(BOOL finished) {</p><p><b>  }];</b></p><p><b>  }];</b></p><p><b>  }</

97、b></p><p>  //收起右邊的tableView</p><p>  - (void)zoonOutRightTabelView</p><p><b>  {</b></p><p>  [UIView animateWithDuration:0.2 animations:^{</p>&

98、lt;p>  _bottomView.left = 0;</p><p>  _isStrech = NO;</p><p>  } completion:^(BOOL finished) {</p><p>  [UIView animateWithDuration:0.09 animations:^{</p><p>  _righ

99、tTableView.left = kScreenWidth;</p><p>  _markImageView.left = _leftTableView.right - 25;</p><p><b>  }];</b></p><p><b>  }];</b></p><p><b&g

100、t;  }</b></p><p>  4.5 食品掃描頁面設計</p><p>  下圖4-5-1為沒有物品置于掃描界面,食品掃描頁面的狀態(tài)。圖4-5-2為有條形碼置于掃描界面時,掃描界面鎖定掃描的物品時的裝填。</p><p>  圖4-5-1 沒有物品置于掃描界面的狀態(tài) 圖4-5-2 有條形碼置于掃描界面的狀態(tài)</p>

101、<p>  首先最主要的掃描功能的實現(xiàn)是通過ZBar庫中的ZBarReadrView來實現(xiàn)的。先判斷當前的設備是否支持攝像頭,如果不支持那么提示用戶當前設備不支持掃描,如果支持那么就初始化一個ZBarReaderView的對象,然后設置此對象的代理為當前的ViewController。再調(diào)用此- (void) readerView: (ZBarReaderView*) readerViewdidReadSymbols: (Z

102、BarSymbolSet*) symbolsfromImage: (UIImage*) image代理方法,當監(jiān)控到有條形碼在攝像頭下,那么就會通過constzbar_symbol_t *symbol = zbar_symbol_set_first_symbol(symbols.zbarSymbolSet);</p><p>  NSString *symbolStr = [NSString stringWith

103、UTF8String: zbar_symbol_get_data(symbol)];這兩句代碼獲取到條形碼的編碼,然后將定時器銷毀,使掃描條不再晃動。之后用此條形碼的編碼進行數(shù)據(jù)請求,如果請求到有數(shù)據(jù),那么就跳轉(zhuǎn)到商品詳情頁面,顯示食品的具體信息;如果沒有數(shù)據(jù)那么就彈出一個UIAlertView提示用戶,沒有此產(chǎn)品的信息。點擊確定,用戶重新進行掃描商品。</p><p>  掃描界面由上至下,分別為寫有“將條形碼

104、圖像置于矩形方框內(nèi)、離手機攝像頭10CM左右,系統(tǒng)就會自動識別”的UILabel,以及一個UIImageView的白色掃描框和一個由UIImageView組成的綠色掃描條、一個由UIButton實現(xiàn)的手動輸入按鈕。</p><p>  UIImageview實現(xiàn)的掃描條,為了讓掃描條效果更加逼真,實現(xiàn)來回晃動的效果,開啟一個NSTimer定時器,首先讓掃描條置于最上方,然后upOrdown的狀態(tài)置為NO,表示掃描

105、條處于向下掃描狀態(tài),當掃描條的y值為390時,將upOrdown的狀態(tài)置為YES,使得掃描條向上運動。這樣循環(huán)往復,就形成了掃描條不斷上下掃描的狀態(tài)。</p><p>  最下邊的UIButton點擊可以進入到輸入條形碼的界面。在此界面包括一個輸入條形碼的UITextField和一個確定、取消的UIButton。當輸入完畢條形碼,點擊確定的UIButton,可以進行數(shù)據(jù)請求;點擊取消按鈕直接返回到掃描界面。<

106、;/p><p>  在此界面加入了UITapGestureRecognizer手勢,當點擊屏幕的時候,會隱藏UINavigationBar和UITabBar;再次點擊又會顯示出來。具體代碼如下:</p><p>  - (void)viewDidLoad</p><p><b>  {</b></p><p>  [supe

107、rviewDidLoad];</p><p>  [self initTitleViewWithTitle:@"掃描"];</p><p>  self.navigationItem.leftBarButtonItem = nil;</p><p>  self.view.backgroundColor = [UIColorwhiteColor]

108、;</p><p><b>  //創(chuàng)建掃描視圖</b></p><p>  readview = [ZBarReaderView new]; // 初始化</p><p>  readview.backgroundColor = [UIColorblueColor];</p><p>  readview.frame

109、= CGRectMake(0, 0, kScreenWidth, self.view.height); // 改變frame</p><p>  readview.readerDelegate = self; // 設置delegate</p><p>  readview.allowsPinchZoom = YES; // 不使用Pinch手勢變焦</p&

110、gt;<p>  readview.torchMode = 0; //關閉閃關燈</p><p>  //是否pinch手勢聚焦</p><p>  [self.viewaddSubview:readview];</p><p>  [self _initViews]; </p><p>  tim

111、er = [NSTimer scheduledTimerWithTimeInterval:.02 target:self selector:@selector(animation1) userInfo:nilrepeats:YES];</p><p><b>  //開始掃描</b></p><p>  [readview start];</p><

112、;p>  UITapGestureRecognizer *tapGesture = [[UITapGestureRecognizeralloc] initWithTarget:self action:@selector(tapGestureAction:)];</p><p>  [self.viewaddGestureRecognizer:tapGesture];</p><p>

113、<b>  }</b></p><p>  - (void)tapGestureAction:(UITapGestureRecognizer *)tapGesture</p><p><b>  {</b></p><p>  isTap = !isTap;</p><p>  MainTabBar

114、Controller *main = (MainTabBarController *)self.tabBarController;</p><p>  if (isTap) {</p><p>  [self.navigationControllersetNavigationBarHidden:NOanimated:YES];</p><p>  [mainhidd

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論