美文网首页
UI事件的传递和响应

UI事件的传递和响应

作者: 修_没毅力没心情 | 来源:发表于2020-01-22 17:32 被阅读0次

UIView和CALayer

· UIView为CALayer提供内容,以及负责处理触摸等事件,参与响应链。

· CALayer负责显示内容contents。

· backgroundColor是CALayer同名属性的包装。

· UIView的显示部分是由CALayer的contents部分来决定的,对应的backing store实际上是一个位图,最后显示到屏幕伤的UI控      件就是位图。

· 两者体现了"职责单一"的系统设计原则。

事件传递和视图响应链

事件传递相关两个方法有以下

- (UIView*)hitTest:(CGPoint)pointwithEvent:(UIEvent*)event;

判断hit由哪个view响应;

- (BOOL)pointInside:(CGPoint)pointwithEvent:(UIEvent*)event;

判断当前位置点是否在当前视图范围内。

事件传递流程图 hitTest:withEvent:的系统实现

视图事件响应相关的基本方法

- (void)touchesEnded:(NSSet *)toucheswithEvent:(UIEvent*)event;

- (void)touchesMoved:(NSSet *)toucheswithEvent:(UIEvent *)event;

- (void)touchesEnded:(NSSet *)toucheswithEvent:(UIEvent*)event;

视图响应链

响应链分事件的传递和事件的响应:

1.事件传递是由上而下(application->window->view倒序遍历子view,通过hitTest和pointInside找到合适的view);

2.事件响应是自下而上(视图响应链),意思是谁来响应/处理这个事件。一直到最上层,如果application都不响应处理,就舍弃,而不是崩溃。

注意:UIViewController没有hitTest:withEvent:方法,所以控制器不参与查找响应视图的过程,但是控制器在响应链中,如果控制器的view不处理事件,会交给控制器来处理。控制器不处理的话,再交给view的下一级响应者处理。

相关文章

网友评论

      本文标题:UI事件的传递和响应

      本文链接:https://www.haomeiwen.com/subject/paguzctx.html