《iPhone與iPad開發實戰—iOS經典應用剖析》連載四
3.3.2 視圖翻轉動畫點擊主視圖右下角的按鈕,主視圖會翻轉到背後視圖,在背後視圖點擊Done按鈕可以返回到主視圖。在iOS中這是一種視圖跳轉的方式,同時還伴有動畫效果。在本應用中采用的是,通過一個根控製器(控製其它控製器的控製器)RootViewController,來控製主視圖控製器(MainViewController)和背後視圖控製器(FlipsideViewController)。
本應用是通過MainWindow.xib文件加載RootViewController控製器,然後在RootViewController控製器中創建一個MainViewController和FlipsideViewController。
雙擊打開MainWindow.xib窗口圖3-25所示。

圖3-25 MainWindow.xib窗口
在圖3-26中雙擊RootViewController打開根控製器設計視圖如圖3-26所示。
圖3-26
根控製器設計視圖
這個根控製器創建的時候沒有對應的視圖對象,我們需要從對象庫中拖拽一個UIView對象,拖拽過程如圖3-27所示。拖拽完成後視圖如圖3-28所示。
圖3-27拖拽View到根控製器

圖3-28
拖拽完成後視圖
打開對象庫(Library)是通過菜單Tools->Library打開。我們還需要在圖3-28視圖添加一個按鈕,該按鈕是一個特殊的按鈕,iOS提供了創建該形式按鈕的模板,首先要在對象庫中找到Rounded Rect Button拖拽到視圖的左下角如圖3-29所示。

這個按鈕如何能變成按鈕呢?這需要選中個按鈕然後在通過菜單Tools->Attributes Inspector打開按鈕檢查器,如圖3-30所示,在圖3-30中Type下拉選項中選擇Info Light,這樣上麵的橢圓形按鈕就變成按鈕如圖3-31所示。

圖3-30屬性檢查器 圖3-31 Info Light按鈕
在圖3-30中Type下拉選項中有很多種按鈕類型,這是開發iOS定義好的幾個模板按鈕。這些按鈕在iOS都有這特殊的含義,如果不是真正需要一般情況不用輕易使用。就是顯示應用信息,一般就是在實用型應用程序中使用。蘋果對於這些按鈕使用指南和規範。現在視圖翻轉的外圍工作已經基本完成,我們可以為程序添加代碼了,首先添加RootViewController.h根控製器h文件如“代碼清單3-1 Password/Classes/RootViewController.h”所示。
【代碼清單3-1】 Password/Classes/RootViewController.h
#import <UIKit/UIKit.h>
@class MainViewController;
@class FlipsideViewController;
@interface RootViewController : UIViewController {
IBOutletUIButton *infoButton;
MainViewController*mainViewController;
FlipsideViewController*flipsideViewController;
UINavigationBar*flipsideNavigationBar;
}
@property (nonatomic, retain) UIButton *infoButton;
@property (nonatomic, retain) MainViewController*mainViewController;
@property (nonatomic, retain) UINavigationBar*flipsideNavigationBar;
@property (nonatomic, retain)FlipsideViewController *flipsideViewController;
- (IBAction)toggleView;
@end
在h文件中需要定義成員變量、方法和屬性,其中infoButton是有關視圖中按鈕對應。
除了在程序中為控件定義輸出口外,還需在中把在視圖控製器或視圖中定義的輸出口的控件成員變量與nib文件中的控件連接起來,如圖3-32所示,infoButton控件的連接過程是按住Control鍵使用鼠標選中Root View Controller拖動連線到infoButton控件,然後鬆開Control鍵選擇控件的輸出口屬性,這是在MainWindow.xib的nib文件這樣連接。如果是一般的nib如圖3-33所示MainView.xib文件,其中的控製器的名字是File’s Owner,因此需要拖動File’s Owner到控件就可以了。一般情況下輸出口的控件定義在視圖控製器中的,但是在本應用中有些控件是定義在視圖中,在這種情況下我們要拖動那個視圖對象到控件就可以了,如圖3-34所示。

圖3-32
根控製器和控件輸出口連接

圖3-33 MainView控製器和控件輸出口連接

圖3-34 MainView和控件輸出口連接
mainViewController屬性是主視圖控製器,flipsideViewController屬性是背後視圖控製器,flipsideNavigationBar是在背後視圖的導航欄控件。toggleView方法是個IBAction(動作)方法,說明它是與控件事件連接在一起的,該方法是對應按鈕的點擊事件的。連接IBAction動作事件與輸出口方法類似,要用Interface Builder把對於的nib文件打開,Interface Builder中把控件和控製器(或視圖)連接起來,但是方向與輸出口相反,輸出口連線是按住Control鍵拖動鼠標從控製器(或視圖)到控件,而IBAction動作事件是從控件拖到控製器(或視圖)。
最後更新:2017-04-02 17:09:28