IOS手势识别
1.響應者鏈的事件傳遞過程
(1)如果view的控制器存在,就傳遞給控制器;如果控制器不存在,則將其傳遞給它的父視圖。
(2)在視圖層次結構的最頂級視圖,如果也不能處理收到的事件或消息,則其將事件或消息傳遞給window對象進行處理。
(3)如果window對象也不處理,則其將事件或消息傳遞給UIApplication對象。
(4)如果UIApplication也不能處理該事件或消息,則將其丟棄。2. UIGestureRecognizer
如果想監聽一個view上面的觸摸事件,之前的做法是:
(1)自定義一個view。
(2)實現view的touches方法,在方法內部實現具體處理代碼。
通過touches方法監聽view觸摸事件,有很明顯的幾個缺點:
(1)必須得自定義view。
(2)由于是在view內部的touches方法中監聽觸摸事件,因此默認情況下,無法讓其他外界對象監聽view的觸摸事件。
(3)不容易區分用戶的具體手勢行為。
iOS 3.2之后,蘋果推出了手勢識別功能(Gesture Recognizer),在觸摸事件處理方面,大大簡化了開發者的開發難度。
為了完成手勢識別,必須借助于手勢識別器----UIGestureRecognizer,利用UIGestureRecognizer,能輕松識別用戶在某個view上面做的一些常見手勢,
UIGestureRecognizer是一個抽象類,定義了所有手勢的基本行為,使用它的子類才能處理具體的手勢:
(1)UITapGestureRecognizer(敲擊)(2)UIPinchGestureRecognizer(捏合,用于縮放)(3)UIPanGestureRecognizer(拖拽)(4)UISwipeGestureRecognizer(輕掃)(5)UIRotationGestureRecognizer(旋轉)(6)UILongPressGestureRecognizer(長按)
代碼:為一個view添加一個事件(兩個手指點擊兩次才會觸發)
#import "ViewController.h"@interface ViewController () @property (weak, nonatomic) IBOutlet UIView *grayView;@end@implementation ViewController- (void)viewDidLoad {[super viewDidLoad];UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tap:)];tap.numberOfTapsRequired = 2;// 設置點擊次數:默認為1tap.numberOfTouchesRequired = 2; // 設置點擊的手指個數[self.grayView addGestureRecognizer:tap];}- (void)tap:(UITapGestureRecognizer *)tapGesture {NSLog(@"用兩個手指點擊了兩次"); }- (void)didReceiveMemoryWarning {[super didReceiveMemoryWarning];// Dispose of any resources that can be recreated. }@end總結
- 上一篇: 上世纪八九十年代的收录放音机拆解
- 下一篇: 在朋友圈求助的NTP问题~