2011年4月13日 星期三

[轉] 使用 UISwipeGestureRecongnizer 實做手勢切換畫面

from : http://www.furnace.idv.tw


UIGestureRecognizer 是自 iOS 3.2 開始加入的手指動態辨識功能,本文所介紹的手指動態是橫向劃過螢幕的 UISwipeGestureRecognizer class。我們將利用手指由右至左,劃過螢幕的方式當做觸發事件,然後切換兩個不同的 View。(View-based Template)

在 Project 中的 ViewController 我們將他當做一個可以包含兩個 View 並切換的容器,然後再 Class 資料夾中另外加入兩個 ViewController 並且附帶 xib 檔。接著在最原先的ViewController.h 檔案中,宣告另外兩個 ViewController 當做它的 Instance Variable 並在程式進入點鍵入下列程式碼。
- (void)viewDidLoad  //宣告第一個viewcontroller  //並加入到主要的viewcontroller也就是self的view中  NumberOneViewController *aViewController = [[NumberOneViewController alloc] init]; self.firstViewController = aViewController; [self.view addSubview:firstViewController.view]; [aViewController release];  //宣告第二個view controller放到記憶體中  //但是不加到主要的viewcontroller中  NumberTwoViewController *tempoViewController = [[NumberTwoViewController alloc] init]; self.secondViewController = tempoViewController;  [tempoViewController release];  //宣告UISwipeGestureRecognizer同時指定target及action  UISwipeGestureRecognizer *swipeGestureRecognizer = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(switchViews)];  //指定偵測手指劃過螢幕的方向為由右至左  swipeGestureRecognizer.direction = UISwipeGestureRecognizerDirectionLeft;  //加入swipe gesture recognizer到主要的viewcontroller中  [self.view addGestureRecognizer:swipeGestureRecognizer];  [swipeGestureRecognizer release];  [super viewDidLoad]; }

在宣告 UISwipeGestureRecognizer 時必須指定觸發事件後的反應對象以及方法。之後我們建立一個 switchViews 的方法來做兩個 View 的切換,其程式碼如下。
-(void)switchViews //設定兩個View切換時的過場動畫條件  [UIView beginAnimations:@"flipTransition" context:NULL];  [UIView setAnimationDuration:1.5];  [UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];  //條件式中設定兩個view之間的切換  if (self.secondViewController.view.superview == nil)  UIView *theSuperView = firstViewController.view.superview;  [UIView setAnimationTransition:UIViewAnimationTransitionFlipFromRight forView:theSuperView cache:YES];  [firstViewController.view removeFromSuperview];  [theSuperView addSubview:secondViewController.view];  [UIView commitAnimations];  }  else  UIView *theSuperView = secondViewController.view.superview;  [UIView setAnimationTransition:UIViewAnimationTransitionFlipFromRight forView:theSuperView cache:YES];  [secondViewController.view removeFromSuperview];  [theSuperView addSubview:firstViewController.view];  [UIView commitAnimations];  } }

加入 GestureRecoginzer 的方式很簡單,但是要注意的是必須加到你要觸發事件的最上層的 View 也就是 superview 中,不然就是兩個 subview 都加入 GestureRecognizer,最方便的方式還是在 superview 中加入,然後利用 superview 觸發事件來做兩個 subview 的切換。結果就如同影片所示。

沒有留言:

張貼留言