本文通過實例給大家詳細講解了IOS開發中Tool Bar切換視圖方法以及原理解釋,希望我們的整理對你有用,一起學習下。
iOS中幾種典型的多視圖程序:
(1)Tab Bar Application:程序的底部有一排按鈕,輕觸其中一個按鈕,相應的視圖被激活并顯示出來;
(2)Navigation-Based Application:其特點是使用navigation controller,而navigation controller使用navigation bar來控制多級視圖;
(3)Tool Bar Application:程序的底部有一個工具條,利用工具條中的按鈕來切換視圖,經常與Tab Bar Application混淆。
這次要做的例子就是使用了Tool Bar,只是簡單了實現了視圖切換功能,并添加一些視圖切換時的效果。在做例子之前,首先要了解一下視圖的切換原理。
此文來自: 馬開東云搜索 轉載請注明出處 網址: http://makaidong.com
此文原標題: 使用Tool Bar切換視圖 來源網址: http://makaidong.com/yangxt/1/58141_12002051.html
一般來說,一個多視圖的程序要至少三個View Controller,其中一個作為Root Controller。所謂Root Controller,是指用戶看到的第一個Controller,并且在程序加載時這個Controller就加載了。
Root Controller通常是UINavigationController或者UITabBarController的子類,也可以是UIViewController的一個子類。
在多視圖程序中,Root Controller的工作獲得兩個或者更多的其他視圖,并根據用戶輸入顯示不用的視圖。
除Root Controller之外,其他視圖就作為Content Controller,可以理解為可能會顯示出來的各種視圖。
為了更好地理解多視圖程序的結構,我們從Empty Application開始創建我們的程序。
1、創建工程:
運行Xcode 4.2,新建一個Empty Application,名稱為MultiView,其他設置如下圖:
2、創建3個View Controller:
依次選擇File — New — New File,打開如下窗口:
找到UIViewController subclass并單擊Next,打開下面的窗口:
輸入名稱RootViewController,并且保證Subclass of選擇UIViewController,下面的兩個選框都不選;按照同樣的步驟新建兩個View Controller,名稱分別是FirstViewController和SecondViewController。建好后,在Project Navigation中顯示文件如下:
3、為三個View Controller創建.xib文件:
依次選擇File — New — New File,打開如下窗口:
在左邊選User Interface,右邊選View,單擊Next,在新窗口中的Device Family中選擇iPhone,單擊Next,打開如下窗口:
輸入名稱RootView,單擊Create,創建了一個.xib文件。用同樣的方法再創建兩個.xib,名稱分別是FirstView和SecondView。
4、修改App Delegate:
4.1 單擊AppDelegate.h,在其中添加代碼,在@interface之前添加@class RootViewController;在@end之前添加@property (strong, nonatomic) RootViewController *rootViewController;添加之后的代碼如下:
view source print ?
#import <UIKit/UIKit.h> @class RootViewController; @interface AppDelegate : UIResponder <UIApplicationDelegate> @property (strong, nonatomic) UIWindow *window; @property (strong, nonatomic) RootViewController *rootViewController; @end
4.2 單擊AppDelegate.m,修改其代碼。
在@implementation之前添加#import "RootViewController.h",在@implementation之后添加@synthesize rootViewController;然后修改didFinishLaunchingWithOptions方法如下:view source print ? - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; // Override point for customization after application launch. self.rootViewController = [[RootViewController alloc] initWithNibName:@"RootView" bundle:nil]; UIView *rootView = self.rootViewController.view; CGRect rootViewFrame = rootView.frame; rootViewFrame.origin.y += [UIApplication sharedApplication].statusBarFrame.size.height; rootView.frame = rootViewFrame; [self.window addSubview:rootView]; self.window.backgroundColor = [UIColor whiteColor]; [self.window makeKeyAndVisible]; return YES; }
① self.rootViewController = [[RootViewController alloc] initWithNibName:@"RootView" bundle:nil];
這行代碼用于從RootView.xib文件中初始化rootViewController,注意initWithNibName:@"RootView"中不要后綴名.xib
② rootViewFrame.origin.y += [UIApplication sharedApplication].statusBarFrame.size.height;
使得RootViewController的視圖不會被狀態欄擋住
5、修改RootViewController.h:
單擊RootViewController.h,在其中添加兩個屬性和一個方法,如下:
view source print ?
#import <UIKit/UIKit.h> @class FirstViewController; @class SecondViewController; @interface RootViewController : UIViewController @property (strong, nonatomic) FirstViewController *firstViewController; @property (strong, nonatomic) SecondViewController *secondViewController; - (IBAction)switchViews:(id)sender; @end
6、打開RootView.xib,在坐邊選擇File's Owner,在右邊打開Identity Inspector,在Class下拉菜單選擇RootViewController:
這樣,我們就可以從RootView.xib文件向RootViewController創建Outlet和Action了。
7、為RootView.xib添加工具欄:打開RootView.xib,拖一個Tool Bar到視圖上,雙擊Tool Bar上的按鈕,修改其名稱為Switch Views:
8、添加Action映射:
選中Switch Views按鈕,按住Control,拖到File's Owner,松開鼠標后選擇switchViews方法:
9、選擇File's Owner,按住Control鍵,拖到View,松開鼠標,選擇view:
10、修改RootViewController.m:
打開RootViewController.m文件,在@implementation之前添加代碼:
view source print ?
#import "FirstViewController.h" #import "SecondViewController.h"
在@implementation之后添加代碼:
view source print ?
@synthesize firstViewController; @synthesize secondViewController;
接下來修改viewDidLoad方法,這個方法默認是被注釋掉的,先去掉其周圍的注釋符,然后修改其代碼如下:
view source print ?
- (void)viewDidLoad { self.firstViewController = [[FirstViewController alloc] initWithNibName:@"FirstView" bundle:nil]; [self.view insertSubview: firstViewController.view atIndex:0]; [super viewDidLoad]; }
添加switchViews方法:
view source print ?
- (IBAction)switchViews:(id)sender { if (self.secondViewController.view.superview == nil) { if (self.secondViewController == nil) { self.secondViewController = [[SecondViewController alloc] initWithNibName:@"SecondView" bundle:nil]; } [firstViewController.view removeFromSuperview]; [self.view insertSubview:self.secondViewController.view atIndex:0]; } else { if (self.firstViewController == nil) { self.firstViewController = [[FirstViewController alloc] initWithNibName:@"FirstView" bundle:nil]; } [secondViewController.view removeFromSuperview]; [self.view insertSubview:self.firstViewController.view atIndex:0]; } }
修改didReceiveMemoryWarning方法:
view source print ?
- (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; if (self.firstViewController.view.superview == nil) { self.firstViewController = nil; } else { self.secondViewController = nil; } }
11、打開FirstView.xib文件,選擇左邊的File's Owner,然后在Identity Inspector中選擇Class為FirstViewController;然后按住Control鍵從File's Owner圖標拖到View,在彈出的菜單選擇view。為SecondView.xib進行同樣的操作,不過Class選擇為SecondViewController。
12、打開FirstView.xib文件,選擇View,打開Attribute Inspector,進行如下設置:
對SecondView.xib進行同樣設置,不過背景顏色設成紅色。
13、此時運行程序,你會看見剛啟動的時候,程序顯示的綠色背景,輕觸Switch Views按鈕后,背景變成了紅色。不斷輕觸按鈕,背景不斷變換。
14、添加切換背景的動畫效果:
打開RootViewController.m,修改其中的switchViews方法如下:
view source print ?
- (IBAction)switchViews:(id)sender { [UIView beginAnimations:@"View Flip" context:nil]; [UIView setAnimationDuration:1.25]; [UIView setAnimationCurve:UIViewAnimationCurveEaseInOut]; if (self.secondViewController.view.superview == nil) { if (self.secondViewController == nil) { self.secondViewController = [[SecondViewController alloc] initWithNibName:@"SecondView" bundle:nil]; } [UIView setAnimationTransition: UIViewAnimationTransitionFlipFromRight forView:self.view cache:YES]; [self.firstViewController.view removeFromSuperview]; [self.view insertSubview:self.secondViewController.view atIndex:0]; } else { if (self.firstViewController == nil) { self.firstViewController = [[FirstViewController alloc] initWithNibName:@"FirstView" bundle:nil]; } [UIView setAnimationTransition: UIViewAnimationTransitionCurlUp forView:self.view cache:YES]; [self.secondViewController.view removeFromSuperview]; [self.view insertSubview:self.firstViewController.view atIndex:0]; } [UIView commitAnimations]; }
注意四個表示切換效果的常量:
view source print ?
UIViewAnimationTransitionFlipFromLeft UIViewAnimationTransitionFlipFromRightUIViewAnimationTransitionCurlDownUIViewAnimationTransitionCurlUp
分別表示從左翻轉、從右翻轉、向下卷、向上卷。
運行后翻頁效果如下:
新聞熱點
疑難解答