判断点击区域是否是子视图_iOS手势点击事件

2c4fd4fb2ad18fb7e20fe6dc90e9c7da.png
  • - (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch

* 这个方法先于touchesBegan:withEvent:执行

* 点击按钮如果处于手势区域,这个方法也会执行到,但是最终是按钮执行响应

* 如果一个view添加了Tap手势,那在它的所有子视图上的点击都会执行这个方法,如果是按钮则由按钮执行响应,如果子view是手势则由子view执行响应

  • - (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer

* 如果希望子view上的手势响应后,父view的手势也响应,则该方法return Yes,默认为NO

  • - (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRequireFailureOfGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer

* 如果父子手势都收到touch事件,该方法return Yes表示第二个优先

  • - (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldBeRequiredToFailByGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer

* 如果父子手势都收到touch事件,该方法return Yes表示第一个优先

  • 作为父视图需要考虑哪些

* 在没有被子视图绊掉的情况下,通过开启同时,并绊其他,来获取处理权

  • 作为子视图需要考虑哪些

* 非自己需要处理的手势传递出去 - 绊自己

* 子视图只想自己处理 - 绊其他

* 子视图不要随意开启同时,pan手势除外(有时需要全局滑动返回)

  • 首先需要知道事件响应的顺序,对于UIButton,UISlider,UISwitch等继承自UIControl的控件,都会率先响应事件,从而阻止了手势事件。手势也可以理解为一种特殊的层,所以在同一个View添加多个Tap手势,则执行最后一个Tap手势,对于TableView,Collection这样的弱点击事件,系统优先响应Tap事件
  • hitTest:withEvent 不接收触摸事件的三种情况

(1)不接收用户交互 userInteractionEnabled = NO

(2)隐藏 hidden = YES

(3)透明 alpha = 0.0 ~ 0.01

  • hitTest和pointInside

很多情况下hitTest和pointInside方法任选其一都可以实现某个功能,比如在屏蔽中,pointInside返回NO可以实现的话,都可以用hitTest返回nil代替。

但是,hitTest更强大。因为pointInside在一般情况下其内部顶多只能根据情况判断怎么返回NO,屏蔽掉自己和子控件的事件响应。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值