iOS 响应链

概述

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

响应者

  • 寻找事件的响应者是通过hitTestpointInside完成的
  • hitTest调用顺序从UIWindow开始,对子视图一次调用
  • 遍历直到找到响应视图,逐级返回最终到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。如果都没有处理事件,事件被丢弃。

响应者链一直传递到AppDelegate:


image.png
  • 找到响应者视图后事件会从此视图开始沿着响应者链nextResponder传递,直到找到处理事件的视图,没有则被丢弃。
  • 如果视图有父视图,则nextResponder指向父视图,如果是根视图则指向控制器。最终指向AppDelegate。
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 前言 按照时间顺序,事件的生命周期是这样的: 事件的产生和传递(事件如何从父控件传递到子控件并寻找到最合适的vie...
    欢博阅读 606评论 0 3
  • 重点参考链接: View Programming Guide for iOS https://developer....
    Kevin_Junbaozi阅读 4,554评论 0 15
  • 最近在写一个图片浏览的需求,一些地方我使用了响应者来处理,顺便又去看看了官方文档,这里记录一下官方文档,并给出一些...
    HelloAda阅读 10,916评论 3 36
  • 当我们在使用微信等工具,点击扫一扫,就能打开二维码扫描视图。在我们点击屏幕的时候,iphone OS获取到了用户进...
    VincentHK阅读 529评论 0 2
  • 首先清楚两个概念响应者:对用户交互动作事件进行响应的对象。响应者链:成为处理事件的响应者的先后顺序链。平时当我们点...
    mengyingguo阅读 400评论 0 1