美文网首页
事件传递与视图响应链

事件传递与视图响应链

作者: 核桃_ad0a | 来源:发表于2021-08-31 15:33 被阅读0次

    事件传递

    在Application将事件分发到主窗口后就会向下查找最合适处理该事件的视图

    Application事件队列->程序主窗口->向下查找最合适处理事件的View

    事件是如何找到最合适处理该事件的视图的呢?

    - (UIView*)hitTest:(CGPoint)pointwithEvent:(UIEvent*)event

    函数是返回响应改事件的视图,如果返回不为空择该视图可以处理该事件,相反返回空则不处理该事件

    - (BOOL)pointInside:(CGPoint)pointwithEvent:(UIEvent*)event

    函数返回产生事件的坐标是否在该视图坐标系中,返回YES,则代表产生事件的点在该视图坐标系上,说明该视图可以处理该事件;返回NO,代表事件的点不在该视图坐标系中,说明该视图不能处理该事件

    事件被分发到程序主窗口也就是UIWindow上后,会调用

    - (UIView*)hitTest:(CGPoint)pointwithEvent:(UIEvent*)event

    - (BOOL)pointInside:(CGPoint)pointwithEvent:(UIEvent*)event

    两个函数来确定当前视图能不能处理该事件,当两个函数满足条件(即hitTest函数返回不为空,potinside返回YES)时,事件会向子视图传递,直到子视图没有符合条件的视图,就认为自己是最合适处理该事件的视图。

    调用顺序是倒叙子视图倒序递归调用

    视图不能接受触摸事件有以下几种情况

    1.不允许交互

    2.设置隐藏,父视图设置了隐藏,或者当前视图设置了隐藏

    3.透明度为0~0.01时,不能接收事件

    视图响应链

    首先要理解:响应者对象(UIResponse)

    在iOS中只有继承UIResPonse的对象才能接受并处理事件,我么称其为响应者对象

    找到事件的最佳响应者后会调用touchesBegin、touchesMoved、touchesEnded等方法。touch方法默认会将事件沿着响应链向下传递(touch方法默认不处理事件,只传递事件),事件传递给下一个响应者处理,也就是事件会沿着响应者链传递,直到被处理或者传递到UIApplication被抛弃掉

    相关文章

      网友评论

          本文标题:事件传递与视图响应链

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