首页 > 代码库 > UITapGestureRecognizer

UITapGestureRecognizer

//单指单击UITapGestureRecognizer *singleFingerOne = [[UITapGestureRecognizer alloc]    initWithTarget:self            action:@selector(handleSingleFingerEvent:)];singleFingerOne.numberOfTouchesRequired = 1; //手指数singleFingerOne.numberOfTapsRequired = 1;    // tap次数singleFingerOne.delegate = self;//单指双击UITapGestureRecognizer *singleFingerTwo = [[UITapGestureRecognizer alloc]    initWithTarget:self            action:@selector(handleSingleFingerEvent:)];singleFingerTwo.numberOfTouchesRequired = 1;singleFingerTwo.numberOfTapsRequired = 2;singleFingerTwo.delegate = self;//双指单击UITapGestureRecognizer *doubleFingerOne = [[UITapGestureRecognizer alloc]    initWithTarget:self            action:@selector(handleDoubleFingerEvent:)];doubleFingerOne.numberOfTouchesRequired = 2;doubleFingerOne.numberOfTapsRequired = 1;doubleFingerOne.delegate = self;//双指双击UITapGestureRecognizer *doubleFingerTwo = [[UITapGestureRecognizer alloc]    initWithTarget:self            action:@selector(handleDoubleFingerEvent:)];doubleFingerTwo.numberOfTouchesRequired = 2;doubleFingerTwo.numberOfTapsRequired = 2;doubleFingerTwo.delegate = self;//如果不加下面的话,当单指双击时,会先调用单指单击中的处理,再调用单指双击中的处理[singleFingerOne requireGestureRecognizerToFail:singleFingerTwo];//同理双指亦是如此[doubleFingerOne requireGestureRecognizerToFail:doubleFingerTwo];[self.view addGestureRecognizer:singleFingerOne];[self.view addGestureRecognizer:singleFingerTwo];[self.view addGestureRecognizer:doubleFingerOne];[self.view addGestureRecognizer:doubleFingerTwo];

处理事件的方法:

//处理单指事件- (void)handleSingleFingerEvent:(UITapGestureRecognizer *)sender {  if (sender.numberOfTapsRequired == 1) {    //单指单击    NSLog(@"单指单击");  } else if (sender.numberOfTapsRequired == 2) {    //单指双击    NSLog(@"单指双击");  }}//处理双指事件- (void)handleDoubleFingerEvent:(UITapGestureRecognizer *)sender {  if (sender.numberOfTapsRequired == 1) {    //双指单击    NSLog(@"双指单击");  } else if (sender.numberOfTapsRequired == 2) {    //双指双击    NSLog(@"双指双击");  }}

如果要使UIImageView响应点击事件:

  UIImageView *imageView = [self yourImageView];  imageView.image = [self yourImage];  imageView.userInteractionEnabled = YES;  UITapGestureRecognizer *singleTap = [[UITapGestureRecognizer alloc]      initWithTarget:self              action:@selector(yourHandlingCode:)];  [imageView addGestureRecognizer:singleTap];

UIKit中包含了UIGestureRecognizer类,用于检测发生在设备中的手势。UIGestureRecognizer是一个抽象类,定义了所有手势的基本行为,它有下面一些子类用于处理具体的手势:
    1、拍击UITapGestureRecognizer (任意次数的拍击)  
    2、向里或向外捏UIPinchGestureRecognizer (用于缩放)  
    3、摇动或者拖拽UIPanGestureRecognizer  
    4、擦碰UISwipeGestureRecognizer (以任意方向)  
    5、旋转UIRotationGestureRecognizer (手指朝相反方向移动)  
    6、长按UILongPressGestureRecognizer 

对于不同类型的手势识别器,具有不同的配置属性。比如UITapGestureRecognizer,可以配置拍击次数。界面接收到手势之后,可以发送一个消息,用于处理响应手势动作后的任务。当然,不同的手势识别器,发送的消息方法也会有所不同。下面列举几个具体示例代码:

    //一个手指,拍击两次手势    UITapGestureRecognizer *oneFingerTwoTaps = [[UITapGestureRecognizer alloc]                                                initWithTarget:self                                                action:@selector(oneFingerTwoTaps)];    [oneFingerTwoTaps setNumberOfTapsRequired:2];    [oneFingerTwoTaps setNumberOfTouchesRequired:1];    [[self view] addGestureRecognizer:oneFingerTwoTaps];        //两个手指,拍击两次手势    UITapGestureRecognizer *twoFingersTwoTaps = [[UITapGestureRecognizer alloc]                                                 initWithTarget:self                                                 action:@selector(twoFingersTwoTaps)];    [twoFingersTwoTaps setNumberOfTapsRequired:2];    [twoFingersTwoTaps setNumberOfTouchesRequired:2];    [[self view] addGestureRecognizer:twoFingersTwoTaps];    //一个手指向上擦碰    UISwipeGestureRecognizer *oneFingerSwipeUp =    [[UISwipeGestureRecognizer alloc]     initWithTarget:self     action:@selector(oneFingerSwipeUp:)] ;    [oneFingerSwipeUp setDirection:UISwipeGestureRecognizerDirectionUp];    [[self view] addGestureRecognizer:oneFingerSwipeUp];        //一个手指向下擦碰    UISwipeGestureRecognizer *oneFingerSwipeDown =    [[UISwipeGestureRecognizer alloc]     initWithTarget:self     action:@selector(oneFingerSwipeDown:)] ;    [oneFingerSwipeDown setDirection:UISwipeGestureRecognizerDirectionDown];    [[self view] addGestureRecognizer:oneFingerSwipeDown];        //旋转手势    UIRotationGestureRecognizer *twoFingersRotate =    [[UIRotationGestureRecognizer alloc]     initWithTarget:self     action:@selector(twoFingersRotate:)];    [[self view] addGestureRecognizer:twoFingersRotate];        //向里或向外捏的手势    UIPinchGestureRecognizer *twoFingerPinch = [[UIPinchGestureRecognizer alloc]                                                initWithTarget:self                                                action:@selector(twoFingerPinch:)] ;    [[self view] addGestureRecognizer:twoFingerPinch];    

处理事件的方法:

- (void)oneFingerTwoTaps {  NSLog(@"Action: One finger, two taps");}- (void)twoFingersTwoTaps {  NSLog(@"Action: Two fingers, two taps");}- (void)oneFingerSwipeUp:(UISwipeGestureRecognizer *)recognizer {  CGPoint point = [recognizer locationInView:[self view]];  NSLog(@"Swipe up - start location: %f,%f", point.x, point.y);}- (void)oneFingerSwipeDown:(UISwipeGestureRecognizer *)recognizer {  CGPoint point = [recognizer locationInView:[self view]];  NSLog(@"Swipe down - start location: %f,%f", point.x, point.y);}- (void)twoFingersRotate:(UIRotationGestureRecognizer *)recognizer {  NSLog(@"Rotation in degrees since last change: %f",        [recognizer rotation] * (180 / M_PI));}- (void)twoFingerPinch:(UIPinchGestureRecognizer *)recognizer {  NSLog(@"Pinch scale: %f", recognizer.scale);}