iOS 事件分发

事件分发

事件分发过程包含两方面:

  1. 点击事件的传递过程,主要是通过Hit-TestView查找当前被点击的点属于哪一个View。
  2. 响应链,事件的响应过程,主要是某个View如何响应点击事件。

点击事件传递

当点击屏幕时,通过hit-testing找到触摸点所在的view,查找过程如下:

  • 从window开始一层一层往下遍历所有的子View;
  • 如果某个View的userInteractionEnabled = NO, enabled = NO, 或alpha <= 0.01, hidden = YES 等情况,则说明该View不是响应View, 直接返回nil, 不再在此View及其subView中查找。
  • 如果触摸点不再View中,直接返回nil, 不再在此View及其subView中查找。
  • 如果触摸点在View中,则继续遍历它的子View, 直到找到被点击的View。

总结下点击事件的传递,从window开始查找,一层一层的遍历其subview,找到被点击的点在哪个View。 从大View到小View查找。

事件响应链

通过hit-testing找到响应的view之后,点击事件就交给它来处理,此时hit-testView就是firstResponder,如果它无法响应事件,则把事件交给它的父View,直到有事件的响应者或传递到appDelegate结束为止。
这一系列的响应者和事件的传递方向就是响应链,在响应链中,所有响应者的基类都是UIResponder, 也就是说所有可以响应事件的类都是UIResponder的子类。

总结下事件响应:从子View开始响应事件,如果不能响应,则往上看父View是否能响应,如果能响应则响应,如果不能则继续往上查找直到appDelegate结束。从小View到大View查找。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 这里就解析一个事情:iOS是如何找到处理触摸事件的视图 关键词: ** Hit-Test View:The low...
    南华coder阅读 1,018评论 0 8
  • iOS事件的传递与响应是一个重要的话题,网上谈论的很多,但大多讲述并不完整,本文将结合苹果官方的文档对事件的传递与...
    还是不够辣阅读 4,581评论 4 31
  • 当你手指触摸屏幕后会发生以下事情:触摸事件被封装成一个UIEvent事件,去当前iOS操作系统的active...
    傲世情缘阅读 1,002评论 0 4
  • 在iOS开发中经常会涉及到触摸事件。本想自己总结一下,但是遇到了这篇文章,感觉总结的已经很到位,特此转载。作者:L...
    WQ_UESTC阅读 6,090评论 4 26
  • 好奇触摸事件是如何从屏幕转移到APP内的?困惑于Cell怎么突然不能点击了?纠结于如何实现这个奇葩响应需求?亦或是...
    Lotheve阅读 57,804评论 51 602