iPhone SDK開發基礎是本文要介紹的內容,我們先來看內容,主要介紹了iPhone程式架構的一些知識。總的來說iPhone程式有兩類架構,一類是遊戲架構,另一類是非遊戲架構,這裡介紹的是非遊戲架構,即基於iPhone 使用者介面標準控制項的程式架構。
典型的iPhone程式包含一個Window和幾個UIViewController,每個UIViewController管理多個UIView可能是UITableView、UIWebView、UIImageView等),3-24所示。這些UIView之間如何進行層次迭放、顯示、隱藏、旋轉、移動等都由UIViewController進行管理,而UIViewController之間的切換,通常情況是通過UINavigationController、UITabBarController或UISplitViewController進行切換。接下來筆者會逐一介紹如何使用這三種Controller來切換你的UIViewController,以及在UIViewController中如何組織和管理你的各種UIView。
圖3-24 iPhone程式架構3.12.1
使用UINavigationController組織和管理UIView當你的程式具有層次化的工作流程時,就比較適合使用UINavigationController來管理UIViewController,即使用者可以從上一層介面進入下一層介面,在下一層介面處理完以後又可以簡單地返回到上一層介面,UINavigationController使用堆棧的方式來管理UIViewController,進入下一層介面的代碼如下。
- [self.navigationController pushViewController:nextController animated:YES];
返回上一層介面的代碼如下。
- [self.navigationController popViewControllerAnimated:YES];
3-25所示,螢幕左上方的“Animal List”按鈕是返回按鈕,注意這個返回按鈕是UINavigationController自動添加的,不需要編寫任何代碼在介面上添加按鈕或者實現按鈕操作,當程式使用pushViewController()函數將ViewController添加進UINavigation Controller的時候,UINavigationController就自動顯示這個返回按鈕,使用者單擊這個“Animal List”按鈕就可以回到原先的介面,UINavigationController的這種運行機制產生這樣的效果,使用者可以一層一層地進入更深的介面層次,然後又可以一層一層的按順序返回,使用這樣的方式來組織使用者介面非常方便。
本節相關的完整Xcode工程原始碼檔案請參考本書附帶的光碟片中的Zoo執行個體。
圖3-25 UINavigationController 程式架構執行個體介面
3.12.2 使用UITabBarController組織和管理UIView
當你的程式分為幾個相對比較獨立的部分時,就比較適合使用UITabBarController來組織使用者介面,3-26所示。
圖3-26 UITabBarController程式架構執行個體介面
在螢幕的下方包含UITabBarController的三個按鈕,使用者單擊不同的按鈕即可以進入不同的介面,每個介面相對來說在整個系統中比較獨立,也就是程式分成了三個相對比較獨立的不同部分,在每個相對獨立的部分你也可以使用UINavigationController等容器類組織你的介面。這樣組織使程式邏輯非常清晰,當然你也可以組織很多個Tab而不只是三個,以下代碼示範如何建立UITabBarController對象,並為其添加多個Tab。
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions: (NSDictionary *)launchOptions {
- // Override point for customization after application launch.
- //Create the navigation Controller
- UINavigationController *localNavigationController;
- //Create UINavigationController tabBarController = [[UITabBarController alloc] init];
- tabBarController.delegate = self;
- // Create the array that will contain all the View controlelr
- NSMutableArray *localControllersArray = [[NSMutableArray alloc] init WithCapacity:3];
3.29 OpenFlow編程
當使用者介面需要按頁面顯示圖片時,使用OpenFlow庫提供的功能,將要顯示的使用者介面圖片分頁進行顯示會使編程工作變得非常快捷。該庫提供了與OS X案頭Finder程式相同的視覺效果,3-46所示就是一個使用OpenFlow庫逐頁進行圖片顯示的程式,使用者按下螢幕即可進行左右滾動顯示,雙擊圖片即可對當前顯示的圖片進行選取操作。
圖3-46 OpenFlow編程執行個體介面
程式在視圖控制器的viewDidAppear()中使用refreshCoverFlow()函數初始化OpenFlow庫,通過setNumberOfImages()函數設定圖片數量,代碼如下。
- // RootViewController.m- (void)refreshCoverFlow{
- CGRect bounds = [[UIScreen mainScreen] bounds];
- AFOpenFlowView *coverFlowView = (AFOpenFlowView*)[self.view viewWithTag:kTagCoverflow];
- if(coverFlowView != nil) [coverFlowView removeFromSuperview];
- coverFlowView = [[AFOpenFlowView alloc] initWithFrame:CGRectMake(0, -30, bounds.size.width, COVERFLOWHEIGHT)];
- coverFlowView.dataSource = self;
- coverFlowView.viewDelegate = self;
- coverFlowView.defaultImage = [self defaultImage];
- coverFlowView.tag = kTagCoverflow;
- [self.view addSubview:coverFlowView];
3.30 UIPageControl編程
當使用者介面需要按頁面進行顯示時,使用iOS提供的UIPageControl控制項將要顯示的使用者介面內容分頁進行顯示會使編程工作變得非常快捷,3-47所示就是一個使用UIPageControl控制項逐頁進行圖片顯示的程式,使用者按下螢幕即可進行左右滾動顯示,在螢幕的正上方使用白色的點顯示當前滾動到的頁面位置。
圖3-47 UIPageControl編程執行個體介面
程式自訂一個SwipeView類,該類通過子類化UIView類並重載其touchesMoved()方法捕獲使用者滾動的方向,類的定義如下。3.31 自訂儀錶控制項
在iOS開發中,因為程式的需要,有時要自行繪製iPhone SDK沒有提供的介面控制項,通常使用QuartzCore.framework即可畫出你所需要的各種圖形,在這裡我們實現一個圓形的“儀錶盤”控制項,控制項的外觀3-48所示,使用者可以通過旋轉儀錶控制項的指標來設定程式需要的各種系統參數。
圖3-48 “儀錶盤”控制項控制項使用兩個UIView來實現儀錶控制項,並通過CGAffineTransform類來實現儀錶指標的旋轉,控制項在UIDialView類中實現,UIDialView類的定義如下。
- // UIDialView.h
- #import <UIKit/UIKit.h>
- @protocol UIDialViewDelegate
- @optional- (void)dialValue:(int)tag Value:(float)value;
- @end
小結:關於iPhone SDK開發基礎的內容介紹完了,希望本文對你有所協助,更多相關iphone的內容請參考編輯精選。