美文网首页
点击事件的传递

点击事件的传递

作者: 今天写明天改 | 来源:发表于2021-06-18 23:52 被阅读0次

背景

最近要做一个页面形状如下

页面样式

一看,非常简单。三个view就处理好了一个透明的view、一个灰色的view和透明view等大,一个蓝色的view 加在透明的view上底部和透明的view顶部对齐。

实践

按照之前的思路、简单做好、运行,样式正确。这个时候,要求点蓝色的地方要响应手势,于是UITapgestureRecognizer 初始化 添加。但是我发现手势不响应,

手势的响应过程大家都应该知道,比如有两个页面 A上有B 那么发生点击的时候,点击的位置开始从下向上找逐层传递手势事件,

也就是A把事件传给B,

然后从上向下逐个判断是否响应该手势,也就是先判断B是否响应该手势,如果响应则B处理,结束。如果不响应,则判断A是否响应。

于是。我开始找问题

找问题

首先。透明的View是最底层的它的范围是灰色区域,然后蓝色加在它的上面,那么点击蓝色的时候,会发生什事情,事件显然没有从透明View传给蓝色View,否则手势就会响应了,那么只能是没有传递,只通过addSubview加在上面还不行吗。返回头看一下书上的解释。发生点击的时候,点击的位置 开始从下向上找逐层传递手势事件, 注意是从点击的位置开始,当我点蓝色的区域的时候,蓝色区域位置下并没有透明的view 所以事件也不会响应。

但是,那换成ViewController行不行呢。透明的View和蓝色View都换成controller。 大家都知道我们的ViewController在添加子viewController的view到它自己的viewHierarchy之间必须通过addChildViewController的方式来关联两个ViewController,这是为了让iOS能够恰当的把事件传送给viewControllers和子controller的view,移除的时候也需要先将子controller的view从viewHierarchy移除,之后断开子controller和自身的关联。 

依然是实践、运行,然后发现不行。事件的传递并不像想象中那样,两个ViewController的view不重叠,点击并不会触发子controller的手势。

结论

还是得多看文档,文档上没有字是平白无故写上去的,忽略哪一个,都是为自己挖坑

相关文章

  • (四)react事件

    一、 添加点击事件onClick 点击事件传递参数 二、es6语法传参 添加点击事件onClick 点击事件传递参数

  • 《Android 开发艺术探索》笔记4--View事件分发与滑动

    View事件分发机制 点击事件传递规则 所谓点击事件的事件分发,就是对MotionEvent事件的分发过程,传递给...

  • 点击事件传递

    参考自:一篇搞定事件传递、响应者链条、hitTest和pointInside的使用 事件的传递,主要是理解UIVi...

  • View事件传递机制源码解析

    点击事件的传递规则 点击事件,说直接一点就是MotionEvent对象,事件的传递,就是将MotionEvent对...

  • 点击事件的传递

    背景 最近要做一个页面形状如下 一看,非常简单。三个view就处理好了一个透明的view、一个灰色的view和透明...

  • 三、自定义View ( 事件分发机制 )

    事件的传递规则 一、点击事件(MotionEvent),当点击事件发生后,系统是如何将一个事件传递到view的过程...

  • iOS 事件传递与响应链

    问题 1. iOS点击事件怎么传递到被点击的view的 如下图,点击蓝色view,点击事件是如何传递并最终确认被点...

  • Flutter基础(二)

    列表的点击事件 onTap 点击事件 onLongPress 长按事件 页面跳转传递参数 Navigator.pu...

  • View事件分发(一)

    View事件分发 点击事件的传递规则 点击事件首先要分析的对象就是MotionEvent,即点击事件,其实所谓的点...

  • UIView 点击事件传递

    (nullable UIView *)hitTest:(CGPoint)point withEvent:(null...

网友评论

      本文标题:点击事件的传递

      本文链接:https://www.haomeiwen.com/subject/jyylyltx.html