iOS的手势

最近一个项目的需求,用到了手势识别,此处简单写一下使用时碰到的困难及解决方法。

  1. UITapGestureRecognizer 点击手势
    手势的识别需要userInteractionEnabled的支持,特别是把手势放到ImageView之类的,ImageView默认没有对userInteractionEnabled打开支持。
    在view上添加手势,又在view上添加button或者tableviewcell。
    a)、 button获取事件后,手势获取不到手势怎么办?
    b)、tableviewcell点击后,手势再次获取手势怎么办?
    通用的解决方法是使用代理,可以分情况解决
#pragma mark UIGestureRecognizer delegate
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch
{
    // 输出点击的view的类名
    NSLog(@"%@", NSStringFromClass([touch.view class]));

    // 若为UITableViewCellContentView(即点击了tableViewCell),则不截获Touch事件
    if ([NSStringFromClass([touch.view class]) isEqualToString:@"UITableViewCellContentView"]) {
        return NO;
    }
}

这个代理非常有用
还有一种是设置

tapGestureRecognizer.cancelsTouchesInView = YES;
// 默认是 yes
  1. 拖拽手势
    这个手势如果你需要多个,建议分开写。
    对于它的控制还是使用代理
    • (BOOL)gestureRecognizer:(UIGestureRecognizer )gestureRecognizer shouldReceiveTouch:(UITouch )touch
      此处经常使用的几个知识点:
      CGPoint point = [touch locationInView:self.view];
      获取你的手势在视图的位置
      不是手势代理的
      [你的手势 setTranslation:CGPointZero inView:_leftView];
      把手势拖动归零。否则会一直叠加

暂时想到这些,如果有错误,请指出。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值