iOS GestureRecognizer與UIResponder touch事件響應
在iOS中UIView是繼承於UIResponder的,而UIResponder是專門用來響應使用者的操作處理各種事件的,包括觸控事件(Touch Events)、運動事件(Motion Events)、遠端控制事件(Remote Control Events,如插入耳機調節音量觸發的事件),而很多我們常用的類也繼承於UIResponder(UIApplication、UIView、UIViewController).
而以下幾個方法
@interface UIResponder : NSObject
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event;//觸控螢幕
- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event;//在螢幕上移動
- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event;//離開螢幕
- (void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event;
是響應觸控事件的方法,我們可以利用這幾個方法自定義自己的手勢。當然Apple也為我們提供了幾個基礎的封裝的手勢提供使用(了UIGestureRecognizer手勢識別)
這裡並不深入研究手勢的響應和傳遞,而是研究下幾個基礎的手勢和touchs的關係,這裡主要利用這幾個內建的手勢方法:
UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(tapEvent:)];
[self addGestureRecognizer:tap];//點選
UIPanGestureRecognizer *pan = [[UIPanGestureRecognizer alloc]initWithTarget:self action:@selector(tapEvent:)];
[self addGestureRecognizer:pan];//平移,慢速移動
UISwipeGestureRecognizer *swipe = [[UISwipeGestureRecognizer alloc]initWithTarget:self action:@selector(tapEvent:)];//滑動,快速移動
[self addGestureRecognizer:swipe];
UILongPressGestureRecognizer *longG = [[UILongPressGestureRecognizer alloc]initWithTarget:self action:@selector(tapEvent:)];//長按
[self addGestureRecognizer:longG];
藍色部分就是需要新增手勢的view,我們分別新增上述的手勢進行測試,同時實現touchs觸控相關方法
首先是UITapGestureRecognizer的方法執行順序
很容易理解,因為只是tap單擊事件,所以在檢測到begin touch時手勢事件就開始響應,同時並不會有move動作
然後是UIPanGestureRecognizer
pan手勢是檢測move的,所以在touch move有響應時,pan手勢也進行響應
UISwipeGestureRecognizer
UILongPressGestureRecognizer
通過以上測試表明系統內建的手勢事件是對UIResponder touch事件的監測封裝,通過不同的計算得出是否觸發了某個手勢,而根據不同的手勢,觸發的時機也不同。通過UIResponder,我們也可以自定義自己的手勢,通過模擬系統手勢很容易就能實現.
相關文章
- UIResponder事件響應鏈學習筆記UI事件筆記
- [譯] iOS 響應者鏈 UIResponder、UIEvent 和 UIControl 的使用iOSUI
- touch事件與click事件區別事件
- 記錄下:iOS事件的事件的傳遞和響應iOS事件
- 淺談 iOS 事件的傳遞和響應過程iOS事件
- 移動端touch事件事件
- 移動端 touch事件事件
- iOS探索:UI檢視之事件傳遞&檢視響應iOSUI事件
- iOS 中的事件傳遞和響應機制 - 原理篇iOS事件
- iOS 中的事件傳遞和響應機制 - 實踐篇iOS事件
- iOS 中的事件傳遞和響應機制 – 實踐篇iOS事件
- iOS響應者鏈iOS
- iOS 響應者鏈iOS
- cc.Node事件響應事件
- 網路安全事件應急響應事件
- 理解響應者和響應鏈如何處理事件事件
- iOS UIButton之防止重複點選(控制事件響應時間間隔)iOSUI事件
- touch事件和click事件多次觸發的問題事件
- 手機端html5觸屏事件(touch事件)HTML事件
- Flutter:如何響應觸控事件Flutter事件
- Flutter:如何響應互動事件?Flutter事件
- UIDatePicker事件不響應問題UI事件
- Java進階09 事件響應Java事件
- 事件傳遞和響應鏈事件
- Flutter事件響應原始碼分析Flutter事件原始碼
- 記一次安全應急響應事件事件
- 玩轉iOS開發:Touch ID整合iOS
- C#事件及響應方法概述C#事件
- iOS實現ScrollView中子控制元件(Button,自定義View)的觸控事件響應iOSView控制元件事件
- Flutter——原生View的Touch事件分發流程FlutterView事件
- 事件傳遞和響應者鏈條事件
- Java進階學習之事件響應Java事件
- 記一次挖礦病毒應急響應事件事件
- 由自定義事件到vue資料響應事件Vue
- Element 輸入框input響應回車事件事件
- 【Android Developers Training】 67. 響應觸控事件AndroidDeveloperAI事件
- 【IDL】 彈出介面事件響應示例程式事件
- Flutter 使用者互動事件的響應Flutter事件