Skip to content

Latest commit

 

History

History
49 lines (14 loc) · 1.49 KB

事件处理机制.md

File metadata and controls

49 lines (14 loc) · 1.49 KB

简单讲述事件传递与视图响应链

查看答案

image-20200328165012128

假设我们的测试工程居中有一个红色的UIViewUIView居中有一个标题为Button的按钮。此时我们查看图层结构,展示如下所示。

image-20200328165326038

此时从底部到最上面的图层分别时UIWindow-UITransitionView-UIDropShadowView-UIView-UIView-UIButton-UIButtonLabel

响应链会通过hitTest(**_** point: CGPoint, with event: UIEvent?) -> UIView?这个方法从最底部查找是否包含所在的视图上面之后添加到响应链中。

通过图层发现对应的响应链如下

image-20200328170449526

之后从响应链中从上到下,查询响应者。如果视图alpha <= 0.01 或者userInterface = NO 或者isHidden = YES则继续向下查找。

如果查找到UIApplication还是没有找到响应者,则放弃这个事件。在上图中从UIButtonLabel开始查找,而UIButtonLabelUILabel默认userInterface = NO。则继续向下查找,UIButton满足了三个条件alpha > 0.01 userInterface = YES isHidden = NO则当前点击事件的响应者是UIButton。