UIView可以处理用户的操作 参与视图响应链
CALayer只是图层的显示
事件传递主要跟两个方法有关
- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event;
- (BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event;
当触摸屏幕后,首先传递如下,传递到UIWindow之后会调用他的hitTest和pointside的方法,判断如果在window的范围内,继续遍历window的自视图,按照倒叙原则,后面添加的先遍历,之后再调用hitTest和pointInside的方法,层层遍历,最后返回一个UIView。
事件响应与事件传递是相反的,他是一级一级向着上面传递,如果当前视图不能处理点击事件,那么会把事件传递给父视图去处理,比如在ViewController上面添加个view,如果view没有响应触摸事件(有没有重写touchesBegan、touchesMoved、touchesEnded、touchesCancelled这些响应触摸事件的方法),点击view,事件会传递给ViewController去处理,如果ViewController也处理不了,最后传递给window依然没有处理的话 那么事件就会被丢弃
网友评论