iOS 响应链

概述

响应链是支撑app界面交互的基础,点击,滑动,旋转,摇晃背后都离不开响应链。
触发一次事件时,系统会将事件Event放到事件队列中,由UIApplication从队列中取得这个Event。

响应者

  • 寻找事件的响应者是通过hitTestpointInside完成的
  • hitTest调用顺序从UIWindow开始,对子视图一次调用
  • 遍历直到找到响应视图,逐级返回最终到UIWindow返回此视图

处理者

UIResponder主要有4个方法来处理事件:

- (void)touchesBegan:(NSSet *)touches withEvent:(nullable UIEvent *)event;
- (void)touchesMoved:(NSSet *)touches withEvent:(nullable UIEvent *)event;
- (void)touchesEnded:(NSSet *)touches withEvent:(nullable UIEvent *)event;
- (void)touchesCancelled:(NSSet *)touches withEvent:(nullable UIEvent *)event;

如果Responder没有处理事件,事件会被传递。下个传递给该对象的nextResponder。如果都没有处理事件,事件被丢弃。

响应者链一直传递到AppDelegate:


image.png
  • 找到响应者视图后事件会从此视图开始沿着响应者链nextResponder传递,直到找到处理事件的视图,没有则被丢弃。
  • 如果视图有父视图,则nextResponder指向父视图,如果是根视图则指向控制器。最终指向AppDelegate。

你可能感兴趣的:(iOS 响应链)