国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計 > 正文

ios各種手勢,很有意思

2019-11-14 19:43:44
字體:
供稿:網(wǎng)友

轉(zhuǎn)自http://blog.csdn.net/likendsl/article/details/7554150 這哥們很厲害的

一、概述

iphone中處理觸摸屏的操作,在3.2之前是主要使用的是由UIResponder而來的如下4種方式:

 - (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

但是這種方式甄別不同的手勢操作實(shí)在是麻煩,需要你自己計算做不同的手勢分辨。后來。。。

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

二、UIGestureRecognizer

UIGestureRecognizer基類是一個抽象類,我們主要是使用它的子類(名字包含鏈接,可以點(diǎn)擊跳到ios Developer library,看官方文檔):

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

舉個例子,可以在viewDidLoad函數(shù)里面添加:

 

  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];//關(guān)鍵語句,給self.view添加一個手勢監(jiān)測;  
  7.  panRecognizer.maximumNumberOfTouches = 1;  
  8.  panRecognizer.delegate = self;  
  9.  [panRecognizer release];  
  10. }  

其它手勢方法類似。

 

其核心就是設(shè)置delegate和在需要手勢監(jiān)測的view上使用addGestureRecognizer添加指定的手勢監(jiān)測。

當(dāng)然要記得在作為delegate的view的頭文件加上<UIGestureRecognizerDelegate>。

不過有些手勢是關(guān)聯(lián)的,怎么辦呢?例如 Tap 與 LongPress、Swipe與 Pan,或是 Tap 一次與Tap 兩次。

手勢識別是具有互斥的原則的,比如單擊和雙擊,如果它識別出一種手勢,其后的手勢將不被識別。所以對于關(guān)聯(lián)手勢,要做特殊處理以幫助程序甄別,應(yīng)該把當(dāng)前手勢歸結(jié)到哪一類手勢里面。

比如,單擊和雙擊并存時,如果不做處理,它就只能發(fā)送出單擊的消息。為了能夠識別出雙擊手勢,就需要做一個特殊處理邏輯,即先判斷手勢是否是雙擊,在雙擊失效的情況下作為單擊手勢處理。使用

[A requireGestureRecognizerToFail:B]函數(shù),它可以指定當(dāng)A手勢發(fā)生時,即便A已經(jīng)滿足條件了,也不會立刻觸發(fā)會等到指定的手勢B確定失敗之后才觸發(fā)。

 

  1. - (void)viewDidLoad   
  2. {  
  3.     // 單擊的 Recognizer  
  4.     UITapGestureRecognizer* singleRecognizer;  
  5.     singleRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:selfaction:@selector(SingleTap:)];  
  6.     //點(diǎn)擊的次數(shù)  
  7.     singleTapRecognizer.numberOfTapsRequired = 1; // 單擊  
  8.   
  9.     //給self.view添加一個手勢監(jiān)測;  
  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.     //關(guān)鍵語句,給self.view添加一個手勢監(jiān)測;  
  19.     [self.view addGestureRecognizer:doubleRecognizer];  
  20.       
  21.     // 關(guān)鍵在這一行,雙擊手勢確定監(jiān)測失敗才會觸發(fā)單擊手勢的相應(yīng)操作  
  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. }  

三、iphone操作手勢的大概種類

1.點(diǎn)擊(Tap) 點(diǎn)擊作為最常用手勢,用于按下或選擇一個控件或條目(類似于普通的鼠標(biāo)點(diǎn)擊)、

2.拖動(Drag) 拖動用于實(shí)現(xiàn)一些頁面的滾動,以及對控件的移動功能。

3.滑動(Flick) 滑動用于實(shí)現(xiàn)頁面的快速滾動和翻頁的功能。

4.橫掃(Swipe) 橫掃手勢用于激活列表項(xiàng)的快捷操作菜單

5.雙擊(Double Tap) 雙擊放大并居中顯示圖片,或恢復(fù)原大?。ㄈ绻?dāng)前已經(jīng)放大)。同時,雙擊能夠激活針對文字編輯菜單。

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

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

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

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


發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 嘉禾县| 怀来县| 额济纳旗| 双江| 子长县| 克拉玛依市| 开江县| 阳高县| 石屏县| 梓潼县| 安溪县| 泾阳县| 广灵县| 西安市| 吴旗县| 奉贤区| 连南| 甘泉县| 厦门市| 逊克县| 斗六市| 昭通市| 唐河县| 寿光市| 昌宁县| 开远市| 莫力| 札达县| 沧州市| 磐石市| 潜江市| 平舆县| 黄大仙区| 宜兰县| 麟游县| 汾阳市| 海丰县| 荃湾区| 大关县| 申扎县| 许昌县|