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