美文网首页
iOS 事件分发

iOS 事件分发

作者: Hardy_Hu | 来源:发表于2017-07-07 11:31 被阅读0次

    事件分发

    事件分发过程包含两方面:

    1. 点击事件的传递过程,主要是通过Hit-TestView查找当前被点击的点属于哪一个View。
    2. 响应链,事件的响应过程,主要是某个View如何响应点击事件。

    点击事件传递

    当点击屏幕时,通过hit-testing找到触摸点所在的view,查找过程如下:

    • 从window开始一层一层往下遍历所有的子View;
    • 如果某个View的userInteractionEnabled = NO, enabled = NO, 或alpha <= 0.01, hidden = YES 等情况,则说明该View不是响应View, 直接返回nil, 不再在此View及其subView中查找。
    • 如果触摸点不再View中,直接返回nil, 不再在此View及其subView中查找。
    • 如果触摸点在View中,则继续遍历它的子View, 直到找到被点击的View。

    总结下点击事件的传递,从window开始查找,一层一层的遍历其subview,找到被点击的点在哪个View。 从大View到小View查找。

    事件响应链

    通过hit-testing找到响应的view之后,点击事件就交给它来处理,此时hit-testView就是firstResponder,如果它无法响应事件,则把事件交给它的父View,直到有事件的响应者或传递到appDelegate结束为止。
    这一系列的响应者和事件的传递方向就是响应链,在响应链中,所有响应者的基类都是UIResponder, 也就是说所有可以响应事件的类都是UIResponder的子类。

    总结下事件响应:从子View开始响应事件,如果不能响应,则往上看父View是否能响应,如果能响应则响应,如果不能则继续往上查找直到appDelegate结束。从小View到大View查找。

    相关文章

      网友评论

          本文标题:iOS 事件分发

          本文链接:https://www.haomeiwen.com/subject/qwelhxtx.html