iOS GestureRecognizer與UIResponder touch事件響應(yīng)

在iOS中UIView是繼承于UIResponder的,而UIResponder是專門用來(lái)響應(yīng)用戶的操作處理各種事件的,包括觸摸事件(Touch Events)、運(yùn)動(dòng)事件(Motion Events)、遠(yuǎn)程控制事件(Remote Control Events,如插入耳機(jī)調(diào)節(jié)音量觸發(fā)的事件),而很多我們常用的類也繼承于UIResponder(UIApplication、UIView、UIViewController).

而以下幾個(gè)方法

@interface UIResponder : NSObject
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event;//觸摸屏幕
- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event;//在屏幕上移動(dòng)
- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event;//離開屏幕
- (void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event;

是響應(yīng)觸摸事件的方法,我們可以利用這幾個(gè)方法自定義自己的手勢(shì)。當(dāng)然Apple也為我們提供了幾個(gè)基礎(chǔ)的封裝的手勢(shì)提供使用(了UIGestureRecognizer手勢(shì)識(shí)別)

這里并不深入研究手勢(shì)的響應(yīng)和傳遞,而是研究下幾個(gè)基礎(chǔ)的手勢(shì)和touchs的關(guān)系,這里主要利用這幾個(gè)內(nèi)置的手勢(shì)方法:

UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(tapEvent:)];
[self addGestureRecognizer:tap];//點(diǎn)擊

UIPanGestureRecognizer *pan = [[UIPanGestureRecognizer alloc]initWithTarget:self action:@selector(tapEvent:)];
[self addGestureRecognizer:pan];//平移,慢速移動(dòng)

UISwipeGestureRecognizer *swipe = [[UISwipeGestureRecognizer alloc]initWithTarget:self action:@selector(tapEvent:)];//滑動(dòng),快速移動(dòng)
[self addGestureRecognizer:swipe];

UILongPressGestureRecognizer *longG = [[UILongPressGestureRecognizer alloc]initWithTarget:self action:@selector(tapEvent:)];//長(zhǎng)按
[self addGestureRecognizer:longG];
屏幕快照 2018-07-30 上午9.19.35.png

藍(lán)色部分就是需要添加手勢(shì)的view,我們分別添加上述的手勢(shì)進(jìn)行測(cè)試,同時(shí)實(shí)現(xiàn)touchs觸摸相關(guān)方法

屏幕快照 2018-07-30 上午9.39.21.png

首先是UITapGestureRecognizer的方法執(zhí)行順序

屏幕快照 2018-07-30 上午9.21.30.png

很容易理解,因?yàn)橹皇莟ap單擊事件,所以在檢測(cè)到begin touch時(shí)手勢(shì)事件就開始響應(yīng),同時(shí)并不會(huì)有move動(dòng)作

然后是UIPanGestureRecognizer

屏幕快照 2018-07-30 上午9.22.03.png

pan手勢(shì)是檢測(cè)move的,所以在touch move有響應(yīng)時(shí),pan手勢(shì)也進(jìn)行響應(yīng)

UISwipeGestureRecognizer

屏幕快照 2018-07-30 上午9.23.14.png

UILongPressGestureRecognizer

屏幕快照 2018-07-30 上午9.23.34.png

通過(guò)以上測(cè)試表明系統(tǒng)內(nèi)置的手勢(shì)事件是對(duì)UIResponder touch事件的監(jiān)測(cè)封裝,通過(guò)不同的計(jì)算得出是否觸發(fā)了某個(gè)手勢(shì),而根據(jù)不同的手勢(shì),觸發(fā)的時(shí)機(jī)也不同。通過(guò)UIResponder,我們也可以自定義自己的手勢(shì),通過(guò)模擬系統(tǒng)手勢(shì)很容易就能實(shí)現(xiàn).

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 好奇觸摸事件是如何從屏幕轉(zhuǎn)移到APP內(nèi)的?困惑于Cell怎么突然不能點(diǎn)擊了?糾結(jié)于如何實(shí)現(xiàn)這個(gè)奇葩響應(yīng)需求?亦或是...
    Lotheve閱讀 59,483評(píng)論 51 604
  • 在iOS開發(fā)中經(jīng)常會(huì)涉及到觸摸事件。本想自己總結(jié)一下,但是遇到了這篇文章,感覺(jué)總結(jié)的已經(jīng)很到位,特此轉(zhuǎn)載。作者:L...
    WQ_UESTC閱讀 6,246評(píng)論 4 26
  • 觸摸事件的生命周期 當(dāng)我們手指觸碰屏幕的那一刻,一個(gè)觸摸事件便產(chǎn)生了。經(jīng)過(guò)進(jìn)程間通信,觸摸事件被傳遞到合適的應(yīng)用之...
    Gintok閱讀 1,522評(píng)論 0 3
  • 在開發(fā)過(guò)程中,大家或多或少的都會(huì)碰到令人頭疼的手勢(shì)沖突問(wèn)題,正好前兩天碰到一個(gè)類似的bug,于是借著這個(gè)機(jī)會(huì)了解了...
    閆仕偉閱讀 5,672評(píng)論 2 23
  • 《找到問(wèn)題的根源》 如果你覺(jué)得團(tuán)隊(duì)的某個(gè)人有問(wèn)題,直接去找那個(gè)人,并要求與他談話。從...
    新民李健閱讀 430評(píng)論 0 0

友情鏈接更多精彩內(nèi)容