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);
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值