手勢

轉自http://blog.csdn.net/likendsl/article/details/7554150  html

1、概述ios

iPhone中處理觸摸屏的操做,在3.2以前是主要使用的是由UIResponder而來的以下4種方式:app

 - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
 - (void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event
 - (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
 - (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
iphone

可是這種方式甄別不一樣的手勢操做實在是麻煩,須要你本身計算作不一樣的手勢分辨。後來。。。函數

蘋果就給出了一個比較簡便的方式,就是使用UIGestureRecognizerui

2、UIGestureRecognizerspa

UIGestureRecognizer基類是一個抽象類,咱們主要是使用它的子類(名字包含連接,能夠點擊跳到ios Developer library,看官方文檔):.net

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

舉個例子,能夠在viewDidLoad函數裏面添加:

 

[cpp] view plaincopy

  1. -(void) viewDidLoad  

  2. {  

  3.  [super viewDidLoad];  

  4.  // Do any additional setup after loading the view from its nib.  

  5.  UIPanGestureRecognizer *panRecognizer = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(handlePanFrom:)];  

  6.  [self.view addGestureRecognizer:panRecognizer];//關鍵語句,給self.view添加一個手勢監測;  

  7.  panRecognizer.maximumNumberOfTouches = 1;  

  8.  panRecognizer.delegate = self;  

  9.  [panRecognizer release];  

  10. }  

其它手勢方法相似。

 

其核心就是設置delegate和在須要手勢監測的view上使用addGestureRecognizer添加指定的手勢監測。

固然要記得在做爲delegate的view的頭文件加上<UIGestureRecognizerDelegate>。

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

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

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

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

 

[cpp] view plaincopy

  1. - (void)viewDidLoad   

  2. {  

  3.     // 單擊的 Recognizer  

  4.     UITapGestureRecognizer* singleRecognizer;  

  5.     singleRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:selfaction:@selector(SingleTap:)];  

  6.     //點擊的次數  

  7.     singleTapRecognizer.numberOfTapsRequired = 1; // 單擊  

  8.   

  9.     //給self.view添加一個手勢監測;  

  10.   

  11.   [self.view addGestureRecognizer:singleRecognizer];  

  12.   

  13.     

  14.     // 雙擊的 Recognizer  

  15.     UITapGestureRecognizer* double;  

  16.     doubleRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:selfaction:@selector(DoubleTap:)];  

  17.     doubleTapRecognizer.numberOfTapsRequired = 2; // 雙擊  

  18.     //關鍵語句,給self.view添加一個手勢監測;  

  19.     [self.view addGestureRecognizer:doubleRecognizer];  

  20.       

  21.     // 關鍵在這一行,雙擊手勢肯定監測失敗纔會觸發單擊手勢的相應操做  

  22.     [singleRecognizer requireGestureRecognizerToFail:doubleRecognizer];  

  23.     [singleRecognizer release];  

  24.     [doubleRecognizer release];  

  25. }  

  26.   

  27. -(void)SingleTap:(UITapGestureRecognizer*)recognizer  

  28. {  

  29. //處理單擊操做  

  30. }  

  31.   

  32. -(void)DoubleTap:(UITapGestureRecognizer*)recognizer  

  33. {  

  34. //處理雙擊操做  

  35. }  

3、iphone操做手勢的大概種類

1.點擊(Tap)
點擊做爲最經常使用手勢,用於按下或選擇一個控件或條目(相似於普通的鼠標點擊)、

2.拖動(Drag)
拖動用於實現一些頁面的滾動,以及對控件的移動功能。

3.滑動(Flick)
滑動用於實現頁面的快速滾動和翻頁的功能。

4.橫掃(Swipe)
橫掃手勢用於激活列表項的快捷操做菜單

5.雙擊(Double Tap)
雙擊放大並居中顯示圖片,或恢復原大小(若是當前已經放大)。同時,雙擊可以激活針對文字編輯菜單。

6.放大(Pinch open)
放大手勢能夠實現如下功能:打開訂閱源,打開文章的詳情。在照片查看的時候,放大手勢也可實現放大圖片的功能。

7.縮小(Pinch close)
縮小手勢,能夠實現與放大手勢相反且對應的功能的功能:關閉訂閱源退出到首頁,關閉文章退出至索引頁。在照片查看的時候,縮小手勢也可實現縮小圖片的功能。

8.長按(Touch &Hold)
在個人訂閱頁,長按訂閱源將自動進入編輯模式,同時選中手指當前按下的訂閱源。這時可直接拖動訂閱源移動位置。
針對文字長按,將出現放大鏡輔助功能。鬆開後,則出現編輯菜單。
針對圖片長按,將出現編輯菜單。

9.搖晃(Shake)搖晃手勢,將出現撤銷與重作菜單。主要是針對用戶文本輸入的。

相關文章
相關標籤/搜索