转载

ios 事件链 和 响应链 初步理解

当我们在手机屏幕上进行了一次点击,或者滑动,轻扫手机屏幕,接下来,我们的手机该如何回应我们的指令,软件又经历了哪些过程呢?这篇文章是我自己的简单理解,如有不当,请指出。

1、事件链

当我们用手指轻触屏幕,首先是app的UIApplication对象接收到了这次点击事件,紧接着,UIApplication对象把这次点击传递给了UIWindow对象,UIWindow对象继续向他的子View对象传递,直到传递到最上层。举个例子:

ios 事件链 和 响应链 初步理解

我理解的就是,app会把点击事件传给他上面的每一个子View,至于谁来响应,那就是响应链了。就像上图那样,点击了红色的View,传递过程是这样的:

UIApplication对象——>UIWindow对象——>rootVC.view对象——>redview对象,blueView对象。

2、响应链

当每一个view都收到点击事件之后,谁来做出响应呢?首先,能够响应这个点击的是谁呢?能够响应事件的View,userInteractionEnabled属性一定要是yes。

响应过程是和时间传递过程相反的。

ios 事件链 和 响应链 初步理解

最上面的红色view发现点击事件是在自己的范围内,且自己可以响应这个事件,那么他就不再向下传递了,这就可以理解两个按钮,如果都可以响应点击事件,那么正常情况下应该是上面的按钮响应点击事件。如果红色的View发现自己不具备响应这个事件的能力,那么他会把事件继续向下传递,传递到他的上一层也就是rootVC.view,就这样依次向下传递,直到UIwindow层,发现依然没有可以响应的View,那么这个点击事件就没有响应者,点击无效。

正文到此结束
Loading...