Swipe 手勢指的手指在畫面上快速拖曳或是擦拭的動作,這在 iOS 系統中最常被使用到的操作方式,判斷手指劃過畫面的方式可以由最基本的 UITouch 事件來獲得,UITouch 事件可以捕捉使用者對於觸碰螢幕的操作行為,像是手指觸碰畫面、手指離開畫面或是手指在畫面上移動等等,藉由綜合這些事件並做計算就可以算出手指劃過畫面的等等資訊,但是如果你的應用程式並不需要這麼複雜的手勢操作,那麼就可以考慮使用 UISwipeGestureRecognizer 來製作簡單的手勢辨識。
UISwipeGestureRecognizer 是自 iOS 3.2 就加入的手指動態辨識功能,它能辨識簡單的手指上下左右滑動方向,並且呼叫對應的函式來執行動作,使用的方法如下。
UISwipeGestureRecognizer *swipeUP;
//設定所要偵測的UIView與對應的函式
swipeUP = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(handleSwipe:)];
//設定偵測手勢的類型的(往上劃過)
[swipeUP setDirection:UISwipeGestureRecognizerDirectionUp];
//將辨識的機制加入
[self.view addGestureRecognizer:swipeUP];
上述程式碼我們建立了一個往上劃過的手勢機制,之後只要畫面出現任何符合此機制的手勢行為,就會觸發 handleSwipe: 函式,關於上下左右不同的手勢類型都被定義在 UIGestureRecognizer.h 中。
typedef enum {
UISwipeGestureRecognizerDirectionRight = 1 << 0,
UISwipeGestureRecognizerDirectionLeft = 1 << 1,
UISwipeGestureRecognizerDirectionUp = 1 << 2,
UISwipeGestureRecognizerDirectionDown = 1 << 3
} UISwipeGestureRecognizerDirection;
由於使用 UISwipeGestureRecognizer 方法一次只能定義一種手勢機制,如果你的應用程式需要同時辨識上下左右不同的手勢操作,可以考慮讓它們全都呼叫一個相同的函式,並在函式中使用 Switch Case 來判斷不同的方向,做法如下。
-(void)handleSwipe:(UISwipeGestureRecognizer *)gesture {
switch (gesture.direction) {
case UISwipeGestureRecognizerDirectionUp:
[tipsLabel setText:@"由下往上劃過"];
break;
case UISwipeGestureRecognizerDirectionDown:
[tipsLabel setText:@"由上往下劃過"];
break;
case UISwipeGestureRecognizerDirectionLeft:
[tipsLabel setText:@"由右往左劃過"];
break;
case UISwipeGestureRecognizerDirectionRight:
[tipsLabel setText:@"由左往右劃過"];
break;
default:
break;
}
}
ps:如果想要獲得進行更細部的手勢資訊,像是角度劃過的速度等等還是必須透過 UITouch 來取得,關於其他的手勢資訊可以參考Touch Panel / 觸碰螢幕 / 壓力感應器的基本使用方式ㄧ文,以及Touch Panel 多點觸碰時畫面的座標取得方法ㄧ文。
請問若要辨識
回覆刪除"由左往右劃過、由上往下劃過、由上往下劃過、由上往下劃過、由左往右劃過"
也可以使用Switch Case嗎??
你好:
刪除是的,就像上述的 Switch Case 一樣,你可以用它來辨識是方向,
另外,你可以在索引式搜索列表的 UIGestureRecognizer 分類中找到類似的應用。
http://furnacedigital.blogspot.tw/search/label/C_UIGestureRecognizer
我的理解為
刪除- (void)handleSwipe:(UISwipeGestureRecognizer *)gesture {
switch (gesture.direction) {
case UISwipeGestureRecognizerDirectionRight:
[tipsLabel setText:@"由左往右劃過"];
break;
case UISwipeGestureRecognizerDirectionDown:
[tipsLabel setText:@"由上往下劃過"];
break;
case UISwipeGestureRecognizerDirectionDown:
[tipsLabel setText:@"由上往下劃過"];
break;
case UISwipeGestureRecognizerDirectionRight:
[tipsLabel setText:@"由左往右劃過"];
break;
default:
break;
}
}
可似乎不能重覆,寫了一次的UISwipeGestureRecognizerDirectionRight
就不能再寫UISwipeGestureRecognizerDirectionRight??
您好:
刪除您對 Switch Case 的認知沒有錯,
可是您不是要辨識那四個方向嗎?這些不是都已經包含在 Switch Case 中了,
還是,你是要連續判斷這些動作變成一個手勢,如果是這樣你可能要寫一些 if-else,或是增加一些變數來幫助您判斷的手勢目前是到哪個階段。
另外,手勢辨識 UIGestureRecognizer 物件伊文的最後,有提到製作自訂的手勢,也許對你有幫助,只是這部份我沒有實作過就是了。
http://furnacedigital.blogspot.tw/2012/06/uigesturerecognizer.html