iOS之事件的传递和响应机制

2020-04-20  本文已影响0人  绍清_shao

值得参考的链接

iOS 事件传递&响应链

当前屏幕有一个用户事件时,系统会产生一个事件,交给当前应用的事件处理队列。

寻找能处理事件的View

视图会调用hitTest:withEvent:判断自己能不能处理这个事件。
不能处理的3种情况:
1.不允许交互:userInteractionEnabled = NO
2.隐藏:如果把父控件隐藏,那么子控件也会隐藏,隐藏的控件不能接受事件
3.透明度:如果设置一个控件的透明度<0.01,会直接影响子控件的透明度。alpha:0.0~0.01为透明。
能处理的情况:
父视图会调用子视图hitTest:withEvent:,就算事件点不在视图本身,且不会想上面3种情况下,是能处理这个事件的。并调用point(inside:with:)判断点是否在自己View上。

子视图调用hitTest:withEvent:顺序:
从最外层开始调用hitTest:withEvent:,如果找到了,不会再遍历本视图的hitTest:withEvent:

处理事件

调用touch方法,如果自身能处理,则响应事件不会继续往下传递。如果touch、中调用了super,上一个响应者会调用touch`。

如果当前这个view是控制器的view,那么控制器就是上一个响应者
如果当前这个view不是控制器的view,那么父控件就是上一个响应者

上一篇 下一篇

猜你喜欢

热点阅读