传递过程 -> hitTest 调用顺序
每当手指接触屏幕,操作系统和会把事件传递给当前的 APP,在 UIApplication 接收到手指的事件之后,就会去调用 UIWindow 的hitTest:withEvent:
,看看当前点击的点是不是在 window 内,如果是则继续依次调用其 subview 的hitTest:withEvent:
方法,直到找到最后需要的 view,调用结束并且 hitTest view 确定之后,便可以确定最合适的 view 。
touch -> UIApplication -> UIWindow -> UIViewController.view -> subviews -> ... -> 合适的view
事件的传递顺序 与 hitTest 的调用顺序相反
view -> superview -> ... -> UIViewController.view -> UIViewController -> UIWindow -> UIApplication
hitTest 应用场景:
- 事件穿透
- 子视图超出父视图范围