關於手勢 UIGestureRecognizer

UIGestureRecognizer基類是一個抽象類,咱們主要是使用它的子類:html

從名字上咱們就能知道,Tap(點擊)、Pinch(捏合)、Rotation(旋轉)、Swipe(滑動,快速移動,是用於監測滑動的方向的)、Pan (拖移,慢速移動,是用於監測偏移的量的)以及 LongPress(長按).htm

 

不過有些手勢是關聯的,怎麼辦呢?例如 Tap 與 LongPress、Swipe與 Pan,或是 Tap 一次與Tap 兩次。blog

手勢識別是具備互斥的原則的好比單擊和雙擊,若是它識別出一種手勢,其後的手勢將不被識別。因此對於關聯手勢,要作特殊處理以幫助程序甄別,應該把當前手勢歸結到哪一類手勢裏面。ip

好比,單擊和雙擊並存時,若是不作處理,它就只能發送出單擊的消息。爲了可以識別出雙擊手勢,就須要作一個特殊處理邏輯,即先判斷手勢是不是雙擊,在雙擊失效的狀況下做爲單擊手勢處理。使用get

[A requireGestureRecognizerToFail:B]函數,它能夠指定當A手勢發生時,即使A已經滿足條件了,也不會馬上觸發會等到指定的手勢B肯定失敗以後才觸發。it

- (void)viewDidLoad
{
// 單擊的 Recognizer
UITapGestureRecognizer* singleRecognizer;
singleRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:selfaction:@selector(SingleTap:)];
//點擊的次數
singleTapRecognizer.numberOfTapsRequired = 1;// 單擊
//給self.view添加一個手勢監測;
[self.view addGestureRecognizer:singleRecognizer];
// 雙擊的 Recognizer
UITapGestureRecognizer* doubleRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:selfaction:@selector(DoubleTap:)];
doubleRecognizer.numberOfTapsRequired = 2;// 雙擊
//關鍵語句,給self.view添加一個手勢監測;
[self.view addGestureRecognizer:doubleRecognizer];
// 關鍵在這一行,雙擊手勢肯定監測失敗纔會觸發單擊手勢的相應操做
[singleRecognizer requireGestureRecognizerToFail:doubleRecognizer];
[singleRecognizer release];
[doubleRecognizer release];
}

-(void)SingleTap:(UITapGestureRecognizer*)recognizer
{
//處理單擊操做
}

-(void)DoubleTap:(UITapGestureRecognizer*)recognizer
{
//處理雙擊操做
}
相關文章
相關標籤/搜索