iOS事件响应链中hitTest的应用示例

hitTest的底层实现:

先看自己是否能接受触摸事件

再看触摸点是否在自己身上

从后往前遍历子控件,拿到子控件后,再次重复1,2步骤,要把父控件上的坐标点转换为子控件坐标系下的点,再次执行hitTest方法

若是最后还没有找到合适的view,那么就return self,自己就是合适的view

备注:当控件接收到触摸事件的时候,不管能不能处理事件,都会调用hitTest方法

应用实例

1.扩大UIButton的响应热区

使用示例

也可以自定义UIButton,在自定义的button里实现

2.子view超出了父view的bounds响应事件

重载父view的hitTest(_ point: CGPoint, with event: UIEvent?)方法

3.使部分区域失去响应.

在自定义的tableView中重载hitTest方法

4.让非scrollView区域响应scrollView拖拽事件

如图,这是一个使用scrollView自定义实现的卡片式轮播器,如何实现拖拽scrollView两边的view区域,和拖拽中间scrollView一样的效果呢?只需要在scrollView的父类重载hitTest方法

作者:船长_

链接:https://www.jianshu.com/p/12af9103be03

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180805B0B2EV00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券