Xcode 4開發(fā)第一個(gè)iPhone程序 圖文實(shí)例(上)
Xcode 4開發(fā)***個(gè)iPhone程序“Hello World”是本文要介紹的內(nèi)容,分為上下篇為友們介紹。
項(xiàng)目要求
寫一個(gè)iPhone程序,在屏幕正中顯示文字“Hello Word”,粗體,字體大小26磅,字體顏色紅色,有黑色陰影,陰影光源為左上角,偏移1像素,支持設(shè)備旋轉(zhuǎn)。
需求分析
在開始之前,我們首先來分析一下項(xiàng)目需求,這是一個(gè)非常簡單的項(xiàng)目,只要在屏幕上顯示一段“Hello World”的文字,當(dāng)然還有一些附加條件:
對字體、字體顏色、字體大小有要求,有陰影效果
要求文字顯示在屏幕正中
支持設(shè)備旋轉(zhuǎn),并且無論設(shè)備如何旋轉(zhuǎn),文字都還是顯示在屏幕正中
根據(jù)這些需求,我們將從簡單到復(fù)雜,逐步來實(shí)現(xiàn),分成2步來實(shí)現(xiàn):
在屏幕上顯示文字,設(shè)置字體和字體大小,讓文字顯示在屏幕正中心
支持設(shè)備旋轉(zhuǎn),并且保證旋轉(zhuǎn)后文字還是居中狀態(tài)
產(chǎn)品設(shè)計(jì)
iPhone4之前的屏幕是320x480,到iPhone4的時(shí)候,支持了高清屏,屏幕分辨率變成了640x960。iPhone支持四個(gè)方向的旋轉(zhuǎn)的,橫屏和豎屏表現(xiàn)略有差異,因?yàn)轫?xiàng)目需求要求支持屏幕旋轉(zhuǎn),所以針對橫屏和豎屏,界面表現(xiàn)有所差異,簡單畫一下原型設(shè)計(jì)圖如下:
 

系統(tǒng)分析和設(shè)計(jì)
如果我們還沒iOS下的開發(fā)經(jīng)驗(yàn),那么首先需要去查閱一些相關(guān)資料,讓我們知道如何來開發(fā)一個(gè)iphone程序。蘋果為iOS的開發(fā)者提供了一個(gè)非常詳細(xì)和全面的網(wǎng)站:“iOS Developer Center”,網(wǎng)址:http://developer.apple.com/ios。在iOS Dev Center,有所有iOS SDK的類文檔、入門文檔、各種開發(fā)指南、示例代碼庫等,開發(fā)iOS平臺(tái)的項(xiàng)目,免不了要經(jīng)常上來查閱一些相關(guān)資料。不過比較遺憾的是,目前iOS Dev Center的文檔和資料還是英文為主,中文資料較少,對于英文閱讀不好的同學(xué)是一個(gè)考驗(yàn)。

現(xiàn)在,我們從技術(shù)角度來分析一下如何實(shí)現(xiàn)項(xiàng)目需求。同樣一個(gè)項(xiàng)目,無疑是有很多種技術(shù)方案來實(shí)現(xiàn)的,所以我們有必要定一個(gè)原則,來幫助我們選擇合適的方案,這個(gè)原則就是簡單實(shí)用原則:“我們盡可能采用簡單并且實(shí)用的技術(shù)方案,避免使用復(fù)雜的技術(shù)方案,把時(shí)間和精力浪費(fèi)在一些華而不實(shí)的技巧上面”,本著這個(gè)原則,我們來開始對項(xiàng)目需求進(jìn)行技術(shù)方案的選擇:
在屏幕上顯示特定字體和大小的文字
要在屏幕上顯示特定字體和大小的文字,我們需要先看看iOS SDK中是否已經(jīng)提供了簡單實(shí)用的方式來顯示文字,在iOS Dev Center中,有一篇文章“iOS Human Interface Guidelines”,專門講解了iOS中用戶界面相關(guān)的知識(shí),從中我們可以系統(tǒng)的了解iOS的界面構(gòu)成,各種基本界面元素,并且根據(jù)其中的說明,可以找到UILabel控件是最適合我們項(xiàng)目需求的控件,當(dāng)然也有復(fù)雜的技術(shù)方案,就是采用在界面上自畫的方式,根據(jù)簡單實(shí)用原則,我們就使用UILabel這種iOS自帶控件就可以了。

在開始使用UILabel之前,我們需要先來學(xué)習(xí)了解一下UILabel控件,想要了解UILabel控件的功能,在iOS Dev Center中,找到“UILabel Class Reference”,從中我們可以看到UILabel的介紹和所有屬性、方法等詳細(xì)的說明文檔。

文檔相當(dāng)全面,不過對于我們來說,關(guān)鍵還是要去獲取項(xiàng)目相關(guān)的資料,從文檔中,我們可以逐一找到我們顯示文字需要的相關(guān)屬性:
text: Label顯示的文字,類型為NSString類,也就是本項(xiàng)目需求中要顯示的“Hello World”。
textAlignment: 文字在Label內(nèi)的對其方式,類型為UITextAlignment枚舉,在本項(xiàng)目需求中,要求文字在屏幕正中顯示,對應(yīng)的屬性值為UITextAlignmentCenter。
font: 文字的字體和大小,類型為UIFont類,也就是本項(xiàng)目需求中要求的:“字體為粗體,字體大小26磅”,對應(yīng)代碼為:[UIFont boldSystemFontOfSize:26]。
textColor: 文字的顏色,類型為UIColor類,也就是本項(xiàng)目需求中要求的:“字體顏色紅色”,對應(yīng)代碼為:[UIColor redColor]。
shadowColor: Label文字的陰影顏色,類型為UIColor類,也就是本項(xiàng)目需求中要求的:“有黑色陰影”,對應(yīng)代碼為:[UIColor blackColor]。
shadowOffset: Label文字陰影的偏移方向和偏移量,類型為CGSize,也就是本項(xiàng)目需求中要求的:“陰影光源為左上角,偏移1像素”,對應(yīng)代碼為:[CGSizeMake(1, 1)]。
讓文字顯示在屏幕正中心
要讓文字顯示在屏幕正中心,我們要優(yōu)先考慮設(shè)置UILabel相關(guān)屬性達(dá)到目的的方式,如果沒有UILabel相關(guān)屬性支持,那么我們就必須根據(jù)UILabel占的大小和屏幕大小來計(jì)算它應(yīng)該擺放的坐標(biāo),從而實(shí)現(xiàn)讓文字顯示在屏幕正中心。在UILabel的文檔中,沒有發(fā)現(xiàn)有屬性設(shè)置它的坐標(biāo),也沒有設(shè)置對其的屬性,這是不是代表UILabel不支持呢?不要忽略一個(gè)問題,iOS所用的編程語言是Objective-C,這個(gè)一個(gè)類似于C語言的很好的支持面向?qū)ο筇匦缘恼Z言,面向?qū)ο笥袀€(gè)很重要的特性叫繼承,同樣對于UILabel類來說,它是有父類的,也就是UILabel父類支持的屬性,UILabel都是支持的,在UILabel文檔的首頁,我們可以看到UILabel是從UIView繼承的,所以我們可以鏈接到“UIView Class Reference”文檔。

從文檔中,我們可以找到2個(gè)重要屬性,用來實(shí)現(xiàn)文字顯示在屏幕正中:
frame: Label的位置和尺寸屬性,類型為CGRect,在本項(xiàng)目需求中,要求顯示在屏幕正中,就需要通過Label控件的frame屬性的size值,結(jié)合主界面的尺寸,計(jì)算出x,y坐標(biāo)值,以保證Label顯示在屏幕正中。
autoresizingMask: 這個(gè)屬性表示控件在其父容器尺寸發(fā)生變化時(shí),它是怎么自動(dòng)調(diào)整其尺寸或上下左右各個(gè)方向邊距的。
支持屏幕旋轉(zhuǎn)
iPhone程序默認(rèn)不支持屏幕旋轉(zhuǎn),那么如何讓界面支持旋轉(zhuǎn)呢?在iOS Dev Center中,可以找到“View Controller Programming Guide for iOS”,在其中的“Custom View Controllers”一章中專門有一節(jié)“Managing a View Controller's Interface Orientation”,說明了如何讓你的iOS界面支持設(shè)備旋轉(zhuǎn):
重寫對應(yīng)的View Controller的“shouldAutorotateToInterfaceOrientation:”方法,在方法中申明支持的方向。
配置對應(yīng)的View Controller中的View的autoresizingMask屬性,以適應(yīng)因?yàn)榻缑嫘D(zhuǎn)導(dǎo)致的布局變化。在本項(xiàng)目中,項(xiàng)目需求中要求設(shè)備在旋轉(zhuǎn)也保證文字居中,利用這個(gè)屬性,可以實(shí)現(xiàn)在界面旋轉(zhuǎn)后,窗體寬度和高度發(fā)生變化時(shí),UILabel還能繼續(xù)居中。

小結(jié):Xcode 4開發(fā)***個(gè)iPhone程序 圖文實(shí)例(上)的內(nèi)容介紹完了,請繼續(xù)閱讀 Xcode 4開發(fā)***個(gè)iPhone程序 圖文實(shí)例(下)。















 
 
 




 
 
 
 