查看答案
假设我们的测试工程居中有一个红色的UIView
,UIView
居中有一个标题为Button
的按钮。此时我们查看图层结构,展示如下所示。
此时从底部到最上面的图层分别时UIWindow
-UITransitionView
-UIDropShadowView
-UIView
-UIView
-UIButton
-UIButtonLabel
响应链会通过hitTest(**_** point: CGPoint, with event: UIEvent?) -> UIView?
这个方法从最底部查找是否包含所在的视图上面之后添加到响应链中。
通过图层发现对应的响应链如下
之后从响应链中从上到下,查询响应者。如果视图alpha <= 0.01
或者userInterface = NO
或者isHidden = YES
则继续向下查找。
如果查找到UIApplication
还是没有找到响应者,则放弃这个事件。在上图中从UIButtonLabel
开始查找,而UIButtonLabel
是UILabel
默认userInterface = NO
。则继续向下查找,UIButton
满足了三个条件alpha > 0.01
userInterface = YES
isHidden = NO
则当前点击事件的响应者是UIButton。