iOS事件响应链

事件响应链:当你点击了屏幕上的某个view,这个动作由硬件层传导到操作系统,然后又从底层封装成一个事件(Event)顺着view的层级往上传导,一直要找到含有这个点击点层级最高(文档说是最低,我理解是逻辑上最靠近手指)的view来响应事件,这个view就是hit-test view

用途:我们可以在运行时,扩大Button的相应热区,重置View的hitTestingBounds,来扩大相应区域。

常用极端情况:

1、子view超出了父view的bounds响应事件:

项目中常常遇到button已经超出了父view的范围但仍需可点击的情况,比如自定义Tabbar中间的大按钮,如下图闲鱼的app,点击超出Tabbar bounds的区域也需要响应,此时重载父view的-(UIView *)hitTest: withEvent:方法,去掉点击必须在父view内的判断,然后子view就能成为hit-test view用于响应事件了。

当子View超出父View时,可以先去父View上查找子View,如果子View超出父View,则直接用父视图去相应。

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

推荐阅读更多精彩内容

  • App通过响应者对象来接收和处理事件,响应者对象都是UIResponder的子类对象,常见的UIView,UIVi...
    FlyElephant阅读 1,264评论 0 5
  • 响应者、UITouch 和 UIEvent 在iOS中,能够响应事件的对象都是UIResponder的子类对象。U...
    就叫yang阅读 1,257评论 0 4
  • 前言 当用户点击付款跳转到付款界面、点击扫一扫进入扫描二维码视图。当我们点击屏幕的时候,这个点击事件由硬件层传向i...
    风与鸾阅读 1,294评论 0 0
  • 响应链是如何形成的? 当我们触碰到屏幕的时候,整个iOS系统发生了什么呢? 这里有个思路需要转变一下,本质上,我们...
    点燃火焰阅读 3,578评论 5 24
  • 这个问题啊经常问,网上资料非常多,但是自己老是答不好: 响应链:响应事件的一系列响应者组成的一个层次结构。 事件,...
    iCoreMan阅读 219评论 0 0