使用者登入

全站搜尋

最新回應

論壇最新主題

論壇最新回覆

會員排行榜

線上使用者

目前共有 0 位註冊使用者2 位訪客 在線上。

建立第一支 iPhone程式(二)

babyfish0226
babyfish0226 的照片

原始來源:Creating an iPhone Application
(需先登入apple會員)

建立第一隻iPhone的應用程式(二)

建立應用程式的視窗

每一個應用程式都必須負責建立一個以內容填滿全螢幕 的視窗畫面。在iPhone作業系統中的圖形化應用程式是有別於核心及一些低階的系統的服務之外,而且彼此間並不會同時執行。當您的程式被啟動後,他會是 唯一執行中的項目。因此,您的應用程式將不會需要超過一個以上的視窗畫面,而這視窗畫面是由 UIWindows class 類別所建立的。當您改變您視窗中views的顯示時,這個情況之下您才會需要去改變您的使用者介面。

視窗提供了您使用者介面的表面繪圖能 力,但view物件則是提供實際的內容。一個view的物件是由UIView class類別所提供的實作,繪製出一些內容並提供這些內容的互動與回應。iPhone作業系統定義出基本的views用來呈現類似如表格、按鈕、文字欄 位以及其他互動控制項的類型。您能為您的視窗加入這些不同類型的views或者您能藉由UIView的子類別及實作一些自訂的繪圖與事件處理程式碼來定義 自訂的views。這裡的MoveMe範例程式則定義了兩個views - MyView以及PlacardView類別,用來顯示此應用程式的使用者介面以及處理與使用者的互動。

 注意事項:在iPhone SDK的早期測試版本中,您必須透過自行撰寫程式碼的方式來建立您的視窗及views。但在iPhoneSDK的最終釋出版本您將能夠使用 Interface Builder程式來建立您的視窗及views。Interface Builder是一套視覺化的工具讓您能夠用來建立及編排視窗中的views,此外還能夠配置view的階層、設定每一個view的選項以及建立在您應用 程式中的views與其他物件的關聯性。因為他是一套視覺化的工具,因此您可以使用在視窗上拖曳元件的方式來執行所有的工作。而藉由這樣的互動介面,您將 能夠直接而且很快地看到所有可能的結果。

 

在一開始的執行期間,目標就是用最快的速度來建立一個應用程式的視窗並載入預設的內容。而建立視窗的工作則屬於此應用程式的主要委任目標。當應用程式到達一個被啟動並準備處理事件訊息的狀態時,UIApplication物件將送出一個委任applicationDidFinishLaunching:的訊息,而這個委任的指令是用來建立視窗並執行任何應用程式所需要的初始化動作。

在 MoveMe 的程式中,委派的 applicationDidFinishLaunching: 方法將會執行下列的動作:

1.建立一個頁面大小和螢幕相同的UIWindow的物件。
2.建立一個新的MyView類別的實例以配合背景view及填滿整個視窗頁面。
3.建立一個新的PlacardView類別的實例使用在Welcome的按鈕,並在背景的view中進行置中。
4.顯示這個視窗。

列表2 展示了MoveMe程式中的 applicationDidFinishLaunching: method,而這個method方法由UIScreen類別中取得螢幕的邊界資料並用來建立及初始化一個新的UIWindow物件,而此物件是該應用程式用來委任處理並儲存他視窗成員的變數。然後建立這個視窗的主要內容view並讓它顯示出來。顯示這個視窗將能讓系統知道您的應用程式已經準備好去接收及處理所有的事件。

列表 2 建立應用程式的視窗

- (void)applicationDidFinishLaunching:(UIApplication *)application
{
window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];

// Set up content view to fill screen
contentView = [[MyView alloc] initWithFrame:[window bounds]];

// Set up and show window
[window addSubview:contentView];
[window makeKeyAndVisible];
}

注意事項: 您還能夠使用 applicationDidFinishLaunching: method 來建立您應用程式的使用者介面以外的其他工作。很多的程式用來初始化所需要的資料架構、取出使用者的參數或是回復到應用程式最後離開時的使用狀態。

雖然前面的程式碼完成了建立視窗、建立他的背景view以及將此視窗進行顯示。但您卻未看到用來顯示Welcome按鈕的PlacardView類別的建立。因為此動作是由MyView類別中的initWithFrame: method所處理的,請見列表3。在這個view的部分初始化過程中包含了PlacardView物件的建立。因為MyView的類別提供了整個應用程式的背景並增加了PlacardView物件當成一個subview。而在這兩個view之間的關係不僅僅是在程式背景的上方產生Welcome按鈕的顯示,而且還允許MyView類別能夠處理定義在按鈕上的事件。

 

列表 3 為內容view進行初始化

- initWithFrame:(CGRect)frame
{
if (self = [super initWithFrame:frame])
{

self.backgroundColor = [UIColor darkGrayColor];

// Create the placard view -- it calculates its own frame based on its image
placardView = [[PlacardView alloc] init];
placardView.center = self.center;
[self addSubview:placardView];
}
return self;
}

關於建立視窗及Views的詳細資訊,請見  iPhone OS Programming Guide 文章中關於 "Windows and Views"  章節。

<<續>>