iOS 之 手势

本文深入探讨了iOS开发中手势识别的基础概念,包括不同手势的实现方式及注册规则,并阐述了如何通过自定义delegate方法进行事件判断与传递,特别关注了TableView等事件的特殊处理机制。

  手势操作,有一个总的抽象类UIGestureRecognizer,用于检测设备的所有手势。其下有多个子类:

  •   拍击UITapGestureRecognizer (任意次数的拍击) 
  •     向里或向外捏UIPinchGestureRecognizer (用于缩放)  
  •     摇动或者拖拽UIPanGestureRecognizer  
  •     擦碰UISwipeGestureRecognizer (以任意方向)  
  •     旋转UIRotationGestureRecognizer (手指朝相反方向移动)  
  •     长按UILongPressGestureRecognizer 

  里面有个规则,同一个视图的一种手势,只能注册一个,如果注册多个,则只有一个生效。但是子视图可以再注册同样的手势,子视图注册手势后,点击子视图后,父视图的手势将不再响应,点击子视图时,子视图自己的手势替换了父视图的同类的手势。但是,父视图的手势在其它未注册同类视图的地方还是生效的。

  上面的结论是有特殊情况的,TableView等事件是没有替换之说的。

  通过下面的delegate来判断是否需要往下传递。如果返回YES,就往下传递。

   

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch
{
    // 若为UITableViewCellContentView(即点击了tableViewCell),则不截获Touch事件
    // 但是这个地方,我觉得没有任何影响,可以去掉
    if ([NSStringFromClass([touch.view class]) isEqualToString:@"UITableViewCellContentView"]) {
        return NO;
    }
    return  YES;
}

 

  这是手势delegate里面注册的事件

 

转载于:https://www.cnblogs.com/SimonGao/p/5144222.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值