IOS开发之手势—UIGestureRecognizer 共存
生活随笔
收集整理的這篇文章主要介紹了
IOS开发之手势—UIGestureRecognizer 共存
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
在 iPhone 或 iPad 的開發(fā)中,除了用?touchesBegan / touchesMoved / touchesEnded?這組方法來控制使用者的手指觸控外,也可以用?UIGestureRecognizer?的衍生類別來進(jìn)行判斷。用?UIGestureRecognizer?的好處在于有現(xiàn)成的手勢,開發(fā)者不用自己計算手指移動軌跡。UIGestureRecognizer的衍生類別有以下幾種:
- UITapGestureRecognizer
- UIPinchGestureRecognizer
- UIRotationGestureRecognizer
- UISwipeGestureRecognizer
- UIPanGestureRecognizer
- UILongPressGestureRecognizer
從命名上不難了解這些類別所對應(yīng)代表的手勢,分別是 Tap(點(diǎn)一下)、Pinch(二指往內(nèi)或往外撥動)、Rotation(旋轉(zhuǎn))、Swipe(滑動,快速移動)、Pan (拖移,慢速移動)以及 LongPress(長按)。這些手勢別在使用上也很簡單,只要在使用前定義并添加到對應(yīng)的視圖上即可。
// 定義一個 recognizer, 并加到需要偵測該手勢的 UIView 元件上
- (void)viewDidLoad {
UISwipeGestureRecognizer* recognizer;
// handleSwipeFrom 是偵測到手勢,所要呼叫的方法
recognizer = [[UISwipeGestureRecognizer alloc] initWithTarget:selfaction:@selector(handleSwipeFrom)];
// 不同的 Recognizer 有不同的實體變數(shù)
// 例如 SwipeGesture 可以指定方向
// 而 TapGesture 則可以指定次數(shù)
recognizer.direction = UISwipeGestureRecognizerDirectionUp
[self.view addGestureRecognizer:recognizer];
[recognizer release];
}
- (void)handleSwipeFrom:(UISwipeGestureRecognizer*)recognizer {
// 觸發(fā)手勢事件后,在這里作些事情
// 底下是刪除手勢的方法
[self.view removeGestureRecognizer:recognizer];
} 問題來了。有些手勢其實是互相關(guān)聯(lián)的,例如 Tap 與 LongPress、Swipe與 Pan,或是 Tap 一次與Tap 兩次。當(dāng)一個 UIView 同時添加兩個相關(guān)聯(lián)的手勢時,到底我這一下手指頭按的要算是 Tap 還是 LongPress?如果照預(yù)設(shè)作法來看,只要「先滿足條件」的就會跳出并呼叫對應(yīng)方法,舉例來說,如果同時注冊了 Pan 和 Swipe,只要手指頭一移動就會觸發(fā) Pan 然后跳出,因而永遠(yuǎn)都不會發(fā)生 Swipe;單點(diǎn)與雙點(diǎn)的情形也是一樣,永遠(yuǎn)都只會觸發(fā)單點(diǎn),不會有雙點(diǎn)。
那么這個問題有解嗎?答案是肯定的,UIGestureRecognizer?有個方法叫做requireGestureRecognizerToFail,他可以指定某一個 recognizer,即便自己已經(jīng)滿足條件了,也不會立刻觸發(fā),會等到該指定的 recognizer 確定失敗之后才觸發(fā)。以同時支持單點(diǎn)與雙點(diǎn)的手勢為例,代碼如下:
- (void)viewDidLoad {
// 單擊的 Recognizer
UITapGestureRecognizer* singleRecognizer;
singleRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:selfaction:@selector(handleSingleTapFrom)];
singleTapRecognizer.numberOfTapsRequired = 1; // 單擊
[self.view addGestureRecognizer:singleRecognizer];
// 雙擊的 Recognizer
UITapGestureRecognizer* double;
doubleRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:selfaction:@selector(handleDoubleTapFrom)];
doubleTapRecognizer.numberOfTapsRequired = 2; // 雙擊
[self.view addGestureRecognizer:doubleRecognizer];
// 關(guān)鍵在這一行,如果雙擊確定偵測失敗才會觸發(fā)單擊
[singleRecognizer requireGestureRecognizerToFail:doubleRecognizer];
[singleRecognizer release];
[doubleRecognizer release];
}
?
轉(zhuǎn)載于:https://www.cnblogs.com/daguo/archive/2012/08/06/2624844.html
總結(jié)
以上是生活随笔為你收集整理的IOS开发之手势—UIGestureRecognizer 共存的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: android 去锯齿
- 下一篇: Symbol对象