美文网首页
UI事件传递&响应

UI事件传递&响应

作者: Liuny | 来源:发表于2018-04-11 15:04 被阅读0次

    UIView与CALayer的关系与区别

    UIView为CALayer提供内容,以及负责触摸等事件,参与响应链
    CALayer负责显示内容contents

    image.png

    视图事件传递

    系统是如何找到最终响应的视图是C2?

    事件传递流程图

    图中的hitTest:withEvent其实是一个递归调用,UIWindow调用这个方法,这个方法会遍历所有的子View,子View又会调用自己的hitTest:withEvent方法,最终找到响应的view返回,如果没有找到,则由window响应。
    倒序遍历:就是后添加的view先遍历。

    //最终哪个视图响应这个事件,就返回哪个视图
    -(UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event
    //用于判断点击的位置是否在当前视图内
    -(BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event
    

    事件传递相关的两个方法,在hitTest:withEvent方法中会调用pointInside:withEvent方法。

    hitTest:withEvent系统处理流程

    视图响应链

    官网给出的事件响应链

    如最开始的那幅图所示,点击了C2,事件响应传递顺序为:C2->B2->A->...->UIApplicationDelegate
    如果最终传递到了UIApplicationDelegate还是没人去处理这个事件,那么就会忽略这个事件。

    相关文章

      网友评论

          本文标题:UI事件传递&响应

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