触摸事件的传递和响应机制

2023-05-26  本文已影响0人  springerPrivate

从用户触摸屏幕到app的响应过程。

过程

事件的产生及分发

找寻合适的视图

在寻找合适视图的过程中,主要会用到UIView的两个方法:- (nullable UIView *)hitTest:(CGPoint)point withEvent:(nullable UIEvent *)event;以及- (BOOL)pointInside:(CGPoint)point withEvent:(nullable UIEvent *)event;
hitTest方法中会对视图进行一定的判断:比如 userInteractionEnabled 、isHidden 、alpha 是否>=0.01,如果视图可交互,非隐藏,透明度比0.01大,就会调用pointInside方法判定事件的触发点是否在视图区域内,否则hitTest会返回nil。

事件的响应

响应链的构建情况:

注意点儿

一次触摸事件,触发两次hitTest:

UIControl 和 UIButton ,会影响事件的响应。
如果能响应事件,则响应事件。若不能响应,会截断事件的响应。

UIGestureRecognizer 和 UITextField ,会影响事件响应。
若能响应事件,会将触摸取消。若不能响应,会拦截事件的响应。

UIGestureRecognizer是一个基于NSObject的类,它能影响事件的响应,是因为它会被添加到一个View上。

UITextField ,UIButton 是基于UIControl的类, UIControl 是基于UIview的。
UIApplication 和 UIViewController 是基于 UIResponder的类。

应用

根据事件的传递和响应机制,我们可以在事件传递和响应过程中做操作,以改变原有的事件响应。

上一篇 下一篇

猜你喜欢

热点阅读