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 { //處理雙擊操做 }