iOS开发篇 - 触摸事件传递&事件响应链

触摸事件的传递

触摸事件的传递是从父控件传递到子控件

如果父控件不能接收触摸事件,那么子控件就不可能接收到触摸事件

不能接受触摸事件的四种情况

不接收用户交互,即:userInteractionEnabled = NO

隐藏,即:hidden = YES

透明,即:alpha <= 0.01

未启用,即:enabled = NO

提示:UIImageView的userInteractionEnabled默认就是NO,因此UIImageView以及它的子控件默认是不能接收触摸事件的

如何找到最合适处理事件的控件:

首先,判断自己能否接收触摸事件

可以通过重写hitTest:withEvent:方法验证

其次,判断触摸点是否在自己身上

对应方法pointInside:withEvent:

从后往前(先遍历最后添加的子控件)遍历子控件,重复前面的两个步骤

如果没有符合条件的子控件,那么就自己处理

事件响应者链

如果当前view是控制器的view,那么就传递给控制器

如果控制器不存在,则将其传递给它的父控件

在视图层次结构的最顶层视图也不能处理接收到的事件或消息,则将事件或消息传递给UIWindow对象进行处理

如果UIWindow对象也不处理,则将事件或消息传递给UIApplication对象

如果UIApplication也不能处理该事件或消息,则将其丢弃

补充:如何判断上一个响应者

如果当前这个view是控制器的view,那么控制器就是上一个响应者

如果当前这个view不是控制器的view,那么父控件就是上一个响应者


iOS开发篇 - 触摸事件传递&事件响应链_第1张图片

你可能感兴趣的:(iOS开发篇 - 触摸事件传递&事件响应链)