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事件筆記
- 手持裝置點選響應速度,滑鼠事件與touch事件的那些事事件
- [譯] iOS 響應者鏈 UIResponder、UIEvent 和 UIControl 的使用iOSUI
- touch事件與click事件區別事件
- Cocoa Touch事件處理流程--響應者鏈(轉載)事件
- 記錄下:iOS事件的事件的傳遞和響應iOS事件
- 關於click事件與touch事件衝突的問題事件
- 淺談 iOS 事件的傳遞和響應過程iOS事件
- ios view touchiOSView
- 回車響應事件事件
- iOS探索:UI檢視之事件傳遞&檢視響應iOSUI事件
- iOS中觸控事件的傳遞和響應機制iOS事件
- 移動端 touch事件事件
- 移動端touch事件事件
- iOS 中的事件傳遞和響應機制 - 原理篇iOS事件
- iOS 中的事件傳遞和響應機制 - 實踐篇iOS事件
- iOS 中的事件傳遞和響應機制 – 實踐篇iOS事件
- cc.Node事件響應事件
- js中的事件響應JS事件
- [VC] 滑鼠事件的響應事件
- 網路安全事件應急響應事件
- 理解響應者和響應鏈如何處理事件事件
- iOS 響應者鏈iOS
- iOS響應者鏈iOS
- sencha touch 檢視(view) show與hide事件探討ViewIDE事件
- iOS Touch ID使用教程iOS
- Java進階09 事件響應Java事件
- Flutter:如何響應觸控事件Flutter事件
- Flutter:如何響應互動事件?Flutter事件
- 事件傳遞和響應鏈事件
- Flutter事件響應原始碼分析Flutter事件原始碼
- IOS - 響應者鏈條iOS
- iOS開發-響應鏈iOS
- 史上最詳細的iOS之事件的傳遞和響應機制iOS事件
- Quick Touch – 在 iOS 裝置執行的 “Touch Bar”UIiOS
- 記一次安全應急響應事件事件
- C#事件及響應方法概述C#事件
- angularjs中響應回車事件AngularJS事件