任培花,王麗珍,王莉
(山西大同大學(xué)數(shù)學(xué)與計算機科學(xué)學(xué)院,山西大同 037009)
蘋果公司2007年1月推出一款小巧、輕盈的手持設(shè)備iPhone,不同于一般手持設(shè)備的是,iPhone引入了基于大型多觸點顯示屏和領(lǐng)先性新軟件的全新用戶界面,讓用戶用手指即可控制,加上iPhone的品牌效應(yīng),很快在世界各地得到推廣。在iPhone上開發(fā)一款圖文日記本軟件,能方便人們出行時隨時隨地的寫日記,快速的進行日記記錄和圖片的顯示,比起傳統(tǒng)PC機上的軟件有更高的使用率,并給用戶帶來更多的便利。雖然在PC機上已有類似軟件,相對移動設(shè)備上來說功能較為強大,但其不方便攜帶,也不方便用戶隨時記錄自己的生活,因此開發(fā)一款手機端的圖文日記本是有必要的。
開發(fā)iPhone OS應(yīng)用程序,需要在Mac OS X上運行XCode開發(fā)工具。XCode是Apple的開發(fā)工具套件,支持項目管理、編輯代碼、構(gòu)建可執(zhí)行程序、代碼調(diào)試、代碼的版本管理、性能調(diào)優(yōu)等。這個套件的核心是XCode應(yīng)用本身,它提供了基本的源代碼開發(fā)環(huán)境。XCode所能做到的遠不僅僅是傳統(tǒng)的功能,隨著iPhone SDK的出現(xiàn),XCode還可以管理所有的測試設(shè)備,自動應(yīng)用正確的證書打包iPhone程序,且在iPhone自身上安裝程序。遠程調(diào)試器將實時地連接到設(shè)備上,控制設(shè)備上的程序,管理斷點等。其中,Interface Builder簡稱IB,是Mac OS X平臺下用于設(shè)計和測試用戶界面(GUI)的應(yīng)用程序,它屬于XCode下的一個小工具,為了生成GUI,IB并不是必需的,實際上Mac OS X下所有的用戶界面元素都可以使用代碼直接生成,但IB能夠使開發(fā)者簡單快捷的開發(fā)出符合Mac OS X human-interface guidelines的GUI。通常只需要通過簡單的拖拽(drag-n-drop)操作來構(gòu)建GUI就可以了。
本文在XCode平臺上選擇的開發(fā)框架是Cocoa,開發(fā)語言是Objective-C。Cocoa Framework簡稱Cocoa,它是Mac OS X上的快速應(yīng)用程序開發(fā)(RAD,Rapid Application Development)框架,一個高度面向?qū)ο蟮?Object Oriented)開發(fā)框架,用來生成Mac OS X的應(yīng)用程序,主要的開發(fā)語言為Objective-C,是C語言的一個擴展集,給C添加了一個對象系統(tǒng)也就是面向?qū)ο缶幊蹋邆淞朔庋b性、繼承性的面向?qū)ο筇攸c,但Objective-C沒有剔除掉C的過程式部分,這樣便可以使用對象來完成那些適合它們的任務(wù),而使用Objective-C(普通C)的過程式部分來解決它們最為適用的問題。
基于XCode上開發(fā)的應(yīng)用程序,對于程序性能的檢測,需要嵌入在iPhone中進行測試,但這是不現(xiàn)實的。iPhone模擬器以一種與實際iPhone設(shè)備幾乎相同的方式運行程序,它能夠快速啟動和調(diào)試,所以模擬器創(chuàng)造了一個完美的測試平臺來保證用戶接口按照用戶意愿工作,它還能保證網(wǎng)絡(luò)呼叫正確以及當(dāng)電話旋轉(zhuǎn)時視圖能夠正確地改變,用戶可以使用鼠標(biāo)來模擬觸摸手勢,這樣就能夠節(jié)約大量的開發(fā)和測試時間。
該系統(tǒng)存取記錄信息采用SQLite3數(shù)據(jù)庫,系統(tǒng)中用到的數(shù)據(jù)庫表都是由SQLite3創(chuàng)建的,它是一款輕量級的數(shù)據(jù)庫,設(shè)計目標(biāo)是嵌入式的,而且已經(jīng)在很多嵌入式產(chǎn)品中使用了,另一方面,SQLite3的資源占有率也非常低,這個特點對于iPhone手機軟件開發(fā)非常重要。
圖文日記本是為了方便用戶隨時隨地的記錄一天發(fā)生的事情、當(dāng)天的心情等?;趇Phone的圖文日記本,主要由文本日記、圖文日記、日歷查詢、便簽記事等功能組成。具體的功能模塊設(shè)計見表1:
表1 功能模塊設(shè)計
數(shù)據(jù)結(jié)構(gòu)設(shè)計主要包括數(shù)據(jù)庫概念結(jié)構(gòu)設(shè)計、數(shù)據(jù)庫邏輯結(jié)構(gòu)設(shè)計。數(shù)據(jù)結(jié)構(gòu)設(shè)計需要依據(jù)數(shù)據(jù)需求分析進行。結(jié)合日記本的特點,綜合系統(tǒng)功能分析,本系統(tǒng)的數(shù)據(jù)需求分析主要有:保護密碼信息、文本日記信息、圖文日記信息、便簽記事信息。經(jīng)過系統(tǒng)數(shù)據(jù)庫的功能分析和需求總結(jié),將數(shù)據(jù)項和數(shù)據(jù)結(jié)構(gòu)做如下設(shè)計:
1)密碼保護信息,包括數(shù)據(jù)項:密碼;
2)文本日記信息,包括數(shù)據(jù)項:日期、天氣、地點、日記內(nèi)容;
3)圖文日記信息,包括數(shù)據(jù)項:日期、圖片路徑、圖片分類、文字;
4)便簽記事信息,包括數(shù)據(jù)項:標(biāo)題、內(nèi)容。
2.2.1 數(shù)據(jù)庫概念結(jié)構(gòu)設(shè)計
根據(jù)數(shù)據(jù)項和數(shù)據(jù)結(jié)構(gòu)的分析,在數(shù)據(jù)庫概念結(jié)構(gòu)設(shè)計部分可以設(shè)計出滿足用戶需求的各種實體,為邏輯結(jié)構(gòu)設(shè)計打下基礎(chǔ),實體包括各種具體信息。本系統(tǒng)數(shù)據(jù)庫中包含的實體:密碼保護實體、文本日記實體、圖文日記實體、便簽記事實體。實體的E-R圖見圖1~4所示:
圖1 mypassword E-R圖
圖2 mydiary E-R圖
圖3 imagepath E-R圖
圖4 myessay E-R圖
2.2.2 數(shù)據(jù)庫邏輯結(jié)構(gòu)設(shè)計
根據(jù)數(shù)據(jù)項和數(shù)據(jù)結(jié)構(gòu)的分析,在數(shù)據(jù)庫概念結(jié)構(gòu)設(shè)計部分可以設(shè)計出滿足用戶需求的各種實體,為邏輯結(jié)構(gòu)設(shè)計打下基礎(chǔ),實體包括各種具體信息。本系統(tǒng)數(shù)據(jù)庫中包含的實體有:密碼保護實體、文本日記實體、圖文日記實體、便簽記事實體,以下是本應(yīng)用程序的數(shù)據(jù)表格,分別為存取密碼的mypassword表,存取文本日記的mydiary表,存取圖文日記的imagepath表,存取便簽事件的myessay表,四個表存放在數(shù)據(jù)名為diary.sqlite的數(shù)據(jù)庫中。
1)表2存取的是mypasssword表
表2 mypassword
2)表3存取的是myessay表
表3 myessay表
3)表4存取的是mydiary表
表4 mydiary表
4)表5存取的是imagepath表
表5 imagepath表
在Interface Builder中通過拖拽的方式,進行系統(tǒng)界面的設(shè)計,以登錄界面為例,如下圖2所示:
圖5是進入應(yīng)用程序的第一個界面,必須登陸后才能進入應(yīng)用程序,起到日記隱私保護的功能。它有UITextField、和UIButton組成,作用分別是輸入密碼和登陸,左下角有一個小的Button用來進入修改密碼界面。當(dāng)用戶輸入相應(yīng)的密碼并觸發(fā)確定按鈕即可進入日記本應(yīng)用程序,進行各種所需要的操作。其他8個頁面(如主功能選擇界面、日記功能選擇界面、日記編輯界面等)的設(shè)計同理。
圖5 登陸界面
在XCode集成開發(fā)平臺下,以O(shè)bjective-C為系統(tǒng)開發(fā)語言,編寫各功能模塊的相關(guān)代碼。如登陸界面的關(guān)鍵代碼為:
-(IBAction)doPush:(id)sender
{
MyPassword*password=[MyPassword findPassword:1];
if([myTextField.text isEqualToString:[password password]])
{
[self presentModalViewController:
myDetailViewController animated:YES];
}else{
UIAlertView*alert=
[[UIAlertView alloc]initWithTitle:@"錯誤"
message:@"請核對密碼后再次輸入"
delegate:self cancelButtonTitle:@"OK"otherButtonTitles:nil];
[alert show];
[alert release];
}
}
-(IBAction)doSecuity:(id)sender
{
CABasicAnimation*animation=[CABasicAnimation animationWithKeyPath:@"bounds.size"];
[animation setDelegate:self];
[animation setDuration:1.0];
[animation setRepeatCount:1];
[animation setFromValue:[NSValue valueWithCGSize:CGSizeMake(0,0)]];
[animation setToValue:[NSValue
valueWithCGSize:myView.frame.size]];
[myView.layer addAnimation:animation forKey:@"diaryView-expand"];
UIView*aView=[[self.view subviews]lastObject];
[self.view sendSubviewToBack:aView];}
雖然面向iPhone圖文日記本的各個功能模塊基本實現(xiàn),但由于技術(shù)上的一些限制,有些設(shè)想并沒有得到完全實現(xiàn),比如設(shè)置聲音日記模塊,把錄音作為當(dāng)天的聲音日記進行保存并沒有得到實現(xiàn);另外,在圖文日記模塊中,從網(wǎng)絡(luò)上獲取的圖片不能直接加載到日記中,需要先下載到圖片庫中,再間接的去加載,這樣用戶體驗度就不好。在今后的研究中,本系統(tǒng)在這兩方面有待完善,以提高軟件的性能。
[1]王蕊,萬旺根,王瑞,等.基于iPhone平臺的骨骼動畫研究與實現(xiàn)[J].計算機工程與設(shè)計,2011(23):5043-5047.
[2]陳靜,吳信才,張發(fā)勇,等.基于WebGIS的iPhone應(yīng)用系統(tǒng)設(shè)計與實現(xiàn)[J].微計算機信息,2009(31):140-142.
[3]陳娜,吳信才,張發(fā)勇.基于WebGIS的iPhone公交信息查詢系統(tǒng)的設(shè)計與實現(xiàn)[J].測繪科學(xué),2009(6):276-278.
[4]Erica Sadun.iPhone開發(fā)秘籍[M].張彩霞,高穎譯.北京:人民郵電出版社,2011:56-57.
[5]王緒兵.iPhone應(yīng)用程序開發(fā)指南[M].濟南:山東科學(xué)技術(shù)出版社,2010:134-137.
[6]Mark DAlrymple.Objective-C基礎(chǔ)教程[M].高朝勤譯.北京:人民郵電出版社,2009:25-27.