UGUI 事件穿透规则

UGUI事件分为两大类:点击和拖拽。

点击包括 pointerdown, pointerup。

拖拽包括 begindrag, drag, enddrag。

点击事件无穿透:只会被最上层UI响应,不会向下层传递。

拖拽事件半穿透:透过上层UI直到遇见实现了拖拽事件的第一个UI,并且不会向下层传递。

举例:一堆重叠在同一位置的按钮按层次从上到下依次为A,B,C,D

1,只有最上层的按钮A能收到点击事件。下面的全部被挡住了。

2,给B实现 IBeginDrag, IDrag, IEndDrag接口,则发现对应的事件接口有调用:OnBeginDrag(eventdata), OnDrag(eventdata), OnEndDrag(eventdata)

这说明B没有被上层UI A挡住。

3,给A,B同时实现 IBeginDrag, IDrag, IEndDrag接口,则只有A的对应事件会被调用,B的事件没被调用。

这说明拖拽事件不会向下层传递。

4,给A实现点击接口,给B实现拖拽接口,给C实现点击接口,给D实现拖拽接口。则A能收到点击事件,B能收到拖拽事件。C,D没收到任何事件。

时间: 2024-10-27 03:59:35

UGUI 事件穿透规则的相关文章

IE8,input事件穿透

连续加班一个半月,项目昨天晚上12:08终于上线了:然后处理了一些新发现的bug:一直熬到凌晨五点半才吃点宵夜回家睡觉.然后下午这会过来上班:回想昨晚的场景,真的跟打仗一样..然后发现了一个比较有意思的bug:称之为"事件穿透"!,问题只在纯IE8浏览器下重现(IE9,10,11的的IE8模式切换不重新). 场景大概是这样的:首页有一个浮动的登录框:然后页头有一个导航(有链接),下面还有一个轮播图,而且有链接:如下图所示: 然后,IE8下,当你准备在输入框输入时,忽然发现点了一下,页面

如何让触摸事件穿透一个View

偶然间发现,如何屏蔽或者让触摸事件穿透一个view是一个很简单的事情. 现象: 源码: // // ViewController.m // UserInteraction // // Created by YouXianMing on 14/10/23. // Copyright (c) 2014年 YouXianMing. All rights reserved. // #import "ViewController.h" @interface ViewController () @

支持事件穿透?使用pointer-events样式

使用绝对定位元素,让元素A完全盖住元素B时,如何通过元素A来响应元素B的事件呢? 上图可以用下面的SVG代码来实现: <svg width="200" height="180"> <rect x="50" y="50" width="50" height="50" fill="#f34b5b" onclick="alert('Clicked

转载:事件穿透

前言 小伙伴们在开发中是否遇到过这样的需求呢,一个控件的某个部分被另外一个控件遮挡住,当点击这个重叠部分时,需要响应被遮盖控件的点击事件,就如下图所示 当我们点击区域3时,响应蓝色按钮的点击事件,点击区域1和2时,响应红色按钮的点击事件,对于区域1和3没什么好说的,那如何让红色按钮响应区域2的点击呢?这就是笔者今天要讲的内容. 事件传递 大家应该都知道,事件从应用程序开始,按照从上到下的顺序(UIApplication -> UIWindow -> rootViewController -&g

屏幕事件穿透和拦截分析

事件穿透和拦截机制同样并不是deviceone平台独有的,这个机制几乎是所有和UI相关的技术都共有,了解一下非常有必要.我们会以一个简单的例子来描述事件处理机制运行的过程. 屏幕事件处理机制 我们先假定是手机屏幕显示一个UI,里面包括了4个View,这些View都是树状结构,父View下包含一个或多个子View,其中最上层的View和屏幕大小是一致的,参考下图: 我们可以看到view1有一个子节点view2,view2包含2个子节点view3和view4. 假如我们点击屏幕一个位置,会产生一个事

Unity中uGUI的控件事件穿透逻辑

1.正常来说Image和Text是会拦截点击事件的,如果添加EventTrigger的话,就可以响应对应的交互事件. 2.如果Image和Text是一个Button的子控件,那么虽然其会显示在Button上面,但是并不会拦截点击事件.除非是Selectable的,否则子控件不会影响到父控件的点击. 3.如果是跨Panel或者是同级的Image和Text,是会拦截点击事件的,即如果Image在某个Button之上,那么点击Image的事件不会穿透给Button. 4.如果在3的情况下想忽略点击事件

Unity3d开发(十七)UGUI 事件体系分析

div#cpcontent2 {height:215px;width:215px;float:left;} div#cpmenu {height:200px;float:left;} div#cpcontent {height:200px;width:150px;float:left;} 文章作者:松阳 原文链接:http://blog.csdn.net/fansongy/article/details/52778862 很多Unity3D项目都使用了UGUI,但并不是所有人都研究过它的内部结构

cocos 新手引导之事件穿透

游戏中新手引导 一般都是通过蒙版然后突出某一位置,并配合相应动画来实现的.遮罩层有两个需求,一是可以挖个洞,二是这个洞事件可以穿透, 其他区域不能穿透.如果事件不能穿透,那就需要做很多工作来处理相应的响应.穿透之后实际点的就是那个位置,只需要处理遮罩部分应该有的行为 研究了cocos2dx 3.1 的事件系统,发现虽然不能原生支持,但我们可以简单扩展一下就能达到我们的目的 下边是源代码: LayoutTouchBreak.h class LayoutTouchBreak: public Layo

ViewPager和View的事件响应规则

案例背景: 当我们实现viewpager的自动切换界面操作的时候,如果需要增加点击图片viewpager停止自动切换,松开手指viewpager自动切换又继续执行的逻辑,正常思维下实现代码如下所示: 利用handler发送消息实现viewpager 自动滑动         if (handler == null) {             handler = new Handler(){                 @Override                 public voi