UI進階之手勢識別

手勢識別

一:使用手勢識別觸摸事件的緣由

若是想監聽一個view上面的觸摸事件,以前的作法一般是:先自定義一個view,而後再實現view的touches方法,在方法內部實現具體處理代碼ui

經過touches方法監聽view觸摸事件,有很明顯的幾個缺點spa

(1)必須得自定義view3d

(2)因爲是在view內部的touches方法中監聽觸摸事件,所以默認狀況下,沒法讓其餘外界對象監聽view的觸摸事件(須要經過代理)代理

(3)不容易區分用戶的具體手勢行爲對象

iOS 3.2以後,蘋果推出了手勢識別功能(Gesture Recognizer),在觸摸事件處理方面,大大簡化了開發者的開發難度事件

2、手勢識別器ip

爲了完成手勢識別,必須藉助於手勢識別器----UIGestureRecognizer開發

利用UIGestureRecognizer,能輕鬆識別用戶在某個view上面作的一些常見手勢get

UIGestureRecognizer是一個抽象類,定義了全部手勢的基本行爲,使用它的子類才能處理具體的手勢it

UITapGestureRecognizer(敲擊)

UIPinchGestureRecognizer(捏合,用於縮放)

UIPanGestureRecognizer(拖拽)

UISwipeGestureRecognizer(輕掃)

UIRotationGestureRecognizer(旋轉)

UILongPressGestureRecognizer(長按)

三:UITapGestureRecognizer
用法:
1,建立手勢對象 
UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] init];
2,設置手勢對象屬性:

// 連續敲擊2次

tap.numberOfTapsRequired = 2;

// 須要2根手指一塊兒敲擊

tap.numberOfTouchesRequired = 2;

3,添加手勢識別器到view上
[self.iconView addGestureRecognizer:tap];
4,監聽手勢的觸發
[tap addTarget:self action:@selector(tapIconView:)];

屬性介紹:

numberOfTouchesRequired   //須要多少根手指一塊兒敲擊(默認爲1根)

numberOfTapsRequired    //須要敲擊多少下(默認爲1)

四:UISwipeGestureRecognizer
屬性值:direction,判斷清掃的方向,默認是right
 
提示:swipe.direction=UISwipeGestureRecognizerDirectionDown|UISwipeGestureRecognizerDirectionUp;這種方式最多隻支持1個方向的清掃。
五:UIPanGestureRecognizer
 UIPanGestureRecognizer *pan=[[UIPanGestureRecognizer alloc]init];
 
 
兩個屬性值:
1, 以控制器上的view的左上角爲座標原點
CGPoint point=[pan locationInView:pan.view];

2,返回的值以觸摸點爲原點的距離
注意使用這個方法後必定要清零

[pan setTranslation:CGPointZero inView:pan.view];

每次移動距離都是相對原點來計算:例如第一次中點移動了1個距離。
手指移動到2是,距離實際爲2,而中點只須要移動1個距離。
 
六:UIRotationGestureRecognizer
屬性值:rotation;
縮度
 
 
七:UIPinchGestureRecognizer
屬性值:scale
一樣的然也會出 現累記的問題
 
 
 
注意:1,手勢器:記得清除累加的問題
2,若是想使用多個手勢操做,使用代理
3,imageview默認不會跟用戶交互
 
 
 
CGPoint point1=[pan translationInView:pan.view];
相關文章
相關標籤/搜索