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
领取专属 10元无门槛券
私享最新 技术干货