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;
判断当前位置点是否在当前视图范围内。
视图事件响应相关的基本方法
- (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的下一级响应者处理。