概述
響應(yīng)鏈是支撐app界面交互的基礎(chǔ),點擊船侧,滑動,旋轉(zhuǎn)厅各,搖晃背后都離不開響應(yīng)鏈镜撩。
觸發(fā)一次事件時,系統(tǒng)會將事件Event放到事件隊列中队塘,由UIApplication從隊列中取得這個Event袁梗。
響應(yīng)者
- 尋找事件的響應(yīng)者是通過
hitTest
和pointInside
完成的 -
hitTest
調(diào)用順序從UIWindow開始,對子視圖一次調(diào)用 - 遍歷直到找到響應(yīng)視圖憔古,逐級返回最終到UIWindow返回此視圖
處理者
UIResponder主要有4個方法來處理事件:
- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(nullable UIEvent *)event;
- (void)touchesMoved:(NSSet<UITouch *> *)touches withEvent:(nullable UIEvent *)event;
- (void)touchesEnded:(NSSet<UITouch *> *)touches withEvent:(nullable UIEvent *)event;
- (void)touchesCancelled:(NSSet<UITouch *> *)touches withEvent:(nullable UIEvent *)event;
如果Responder沒有處理事件围段,事件會被傳遞。下個傳遞給該對象的nextResponder投放。如果都沒有處理事件,事件被丟棄适贸。
響應(yīng)者鏈一直傳遞到AppDelegate:
image.png
- 找到響應(yīng)者視圖后事件會從此視圖開始沿著響應(yīng)者鏈nextResponder傳遞灸芳,直到找到處理事件的視圖,沒有則被丟棄拜姿。
- 如果視圖有父視圖烙样,則nextResponder指向父視圖,如果是根視圖則指向控制器蕊肥。最終指向AppDelegate谒获。