IOS學習 UIGestureRecognizer相關
UIGestureRecognizer 是一個具體手勢的基類,提供了較為簡單的手勢實現方式
The concrete subclasses of UIGestureRecognizer
are the following:
一個gesture recognizer是針對一個特定的view的(包含其subview),用UIView的方法addGestureRecognize:去關聯一個view
一個gesture recognizer是不參與UIView的事件響應鏈的
各個手勢使用時的程式碼:
- - (void)viewDidLoad
- {
- [super viewDidLoad];
- // Do any additional setup after loading the view from its nib.
- UITapGestureRecognizer *tapGesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleGesture:)];
- if (![tapGesture respondsToSelector:@selector(locationInView:)]) {
- [tapGesture release];
- tapGesture = nil;
- }else {
- tapGesture.delegate = self;
- tapGesture.numberOfTapsRequired = 1; // The default value is 1.
- tapGesture.numberOfTouchesRequired = 1; // The default value is 1.
- [self.view addGestureRecognizer:tapGesture];
- }
- }
- - (void)handleGesture:(UIGestureRecognizer *)gestureRecognizer
- {
- UIView *view = [gestureRecognizer view]; // 這個view是手勢所屬的view,也就是增加手勢的那個view
- switch (gestureRecognizer.state) {
- case UIGestureRecognizerStateEnded:{ // UIGestureRecognizerStateRecognized = UIGestureRecognizerStateEnded // 正常情況下只響應這個訊息
- NSLog(@"======UIGestureRecognizerStateEnded || UIGestureRecognizerStateRecognized");
- break;
- }
- case UIGestureRecognizerStateFailed:{ //
- NSLog(@"======UIGestureRecognizerStateFailed");
- break;
- }
- case UIGestureRecognizerStatePossible:{ //
- NSLog(@"======UIGestureRecognizerStatePossible");
- break;
- }
- default:{
- NSLog(@"======Unknow gestureRecognizer");
- break;
- }
- }
- }
- // 詢問一個手勢接收者是否應該開始執行一個觸控事件(控制繫結手勢時,繫結的響應函式是否執行,例:return YES執行,NO不執行)
- // 這個方法在touchesBegan:withEvent:之後呼叫
- - (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer{
- // CGPoint currentPoint = [gestureRecognizer locationInView:self.view];
- // if (CGRectContainsPoint(CGRectMake(0, 0, 100, 100), currentPoint) ) {
- // return YES;
- // }
- //
- // return NO;
- return YES;
- }
- // 詢問delegate,兩個手勢是否同時接收訊息,返回YES同事接收。返回NO,不同是接收(如果另外一個手勢返回YES,則並不能保證不同時接收訊息)the default implementation returns NO。
- // 這個函式一般在一個手勢接收者要阻止另外一個手勢接收自己的訊息的時候呼叫
- - (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer{
- return NO;
- }
- // 詢問delegate是否允許手勢接收者接收一個touch物件
- // 返回YES,則允許對這個touch物件稽核,NO,則不允許。
- // 這個方法在touchesBegan:withEvent:之前呼叫,為一個新的touch物件進行呼叫
- - (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch{
- //備註1:xcode會顯示return NO和之後的return YES等都會走,但是實際執行的只有第一個return NO;
- //備註2:返回YES則響應,返回NO則不響應,可以都不響應。
-
if ([touch.view isKindOfClass:[UIButton class]])
{
return NO;
}
else
{
return YES;
}
- return YES;
- }
UIScrollView在SubView繫結代理後(繫結的UIGestureRecognizer單擊)先點選再滑動scrollview,可以通過scrollView的屬性設定允許發“取消事件”,UIGestureRecognizer的屬性設定允許接受“取消事件”,達到泡泡點選不影響滑動.
相關文章
- iOS學習筆記01 APP啟動相關iOS筆記APP
- arm相關學習
- 深度學習相關理論深度學習
- 深度學習相關論文深度學習
- UIGestureRecognizer手勢UI
- three.js學習3_相機相關JS
- 強化學習相關資料強化學習
- View工作流程-相關學習View
- iOS探索:網路相關iOS
- ios效能優化相關iOS優化
- tensorflow相關函式學習總結函式
- GC相關知識簡單學習GC
- 圖學習相關論文快訊
- 網路、HTTP相關學習總結HTTP
- JVM相關知識整理和學習JVM
- iOS狀態列相關操作iOS
- 跟阿銘學Linux-相關學習連結Linux
- FastAPI 學習之路(二十)介面文件配置相關ASTAPI
- [Docker 系列]docker 學習 四,映象相關原理Docker
- 【Docker 系列】docker 學習 四,映象相關原理Docker
- 優化學習率相關演算法優化演算法
- MySQL 5.7 學習心得之安全相關特性MySql
- 【linux】Linux程式相關知識學習整理Linux
- (十五) 學習筆記: Python程式(Process)相關筆記Python
- iOS @property及其關鍵字學習記錄iOS
- iOS相關 | Xcode8 ---- iOS 9.2 崩潰問題iOSXCode
- Java技術相關學習路線,學習Java後薪資如何?Java
- OceanBase學習之路10|C 相關 API 介紹API
- 學習PHP中的URL相關操作函式PHP函式
- Flutter學習(六) 動畫以及動效相關Flutter動畫
- ThreeJS學習6_幾何體相關(BufferGeometry)JS
- Linux 相關學習內容(不定期更新)Linux
- 最近學習了限流相關的演算法演算法
- 學習 java 做自動化測試相關Java
- Spring-boot整合AOP及AOP相關學習Springboot
- 【程式碼】--庫函式學習 ftp通訊 相關函式FTP
- [20230306]學習UNIFIED audit--dg相關問題.txtNifi
- elasticsearch學習筆記二:相關軟體安裝Elasticsearch筆記
- Elasticsearch 學習總結 - 相關配置補充說明Elasticsearch