iOS事件响应机制的事件传递流程
- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event:返回事件响应的视图
- (BOOL) pointInside:(CGPoint)point withEvent:(UIEvent *)event:判断点击位置是否在当前视图范围内
事件传递的大概流程: 点击屏幕-UIApplication - UIWindow- >寻找处理事件最合适的View->hitTest - pointInsde。
注意:如果父视图不能接触触摸事件,那么子控件也不能接受到触摸事件
应用如何找到最合适的控件来处理事件?
整体事件流程图如下图所示
事件响应链
UIResponder是所有响应者对象的基类,正是由于继承了它,才能响应touch事件
优先是最上层的View响应事件,如果该View有父视图,下一个响应值就是父视图,如果没有就传给他对应的ViewController,这样从最上层View一直传到单例UIWindow对象,最后是单例UIApplication对象以终止,UIApplication的下一个响应者是nil,这样就是整个响应链的过程。
网友评论