事件的产生与传递

事件的产生和传递:

发生触摸事件以后,系统会将该事件加入到一个由UIApplication管理的事件队列中,

UIApplication会从事件队列中取出最前面的事件,并将事件分发下去以便处理,通常先发送事件给应用程序的主窗口(keyWindow)

主窗口会在视图层次机构中找到一个最合适的视图来处理触摸事件,但是这仅仅是事件处理的第一步。找到合适的视图控制器后,就会调用视图控件的touchs方法来做具体的事件处理。

UIView不接触事件的三种情况:

1.userIteractionEnable = NO; 例如:把3的userIteractionEnable设置为NO,则点击黄色事件 会传递到2,让2处理事件。

2.隐藏 hidden = YES

3.透明 alpha = 0.0~0.01

注:UIImageView的userIteractionEnable的默认就是NO,因此UIImageView以及它的子控件默认是不能接收接触事件的。

父控件隐藏,子控件也会隐藏。

响应者链条

touches方法的默认做法是将事件顺着响应者链条向上传递,将事件交给上一个响应者进行处理。

UIEvent:

touches和event参数:

UIGestureRecognizer:

手势识别的状态:

时间: 2024-08-14 02:17:28

事件的产生与传递的相关文章

UI进阶--触摸事件的产生和传递

事件的产生和传递: 发生触摸事件后,系统会将该事件加入到一个由UIApplication管理的事件队列中; UIApplication会从事件队列中取出最前面的事件,并将事件分发下去以便处理,通常,先发送事件给应用程序的主窗口(keyWindow); 主窗口会在视图层次结构中找到一个最合适的视图来处理触摸事件,这也是整个事件处理过程的第一步; 找到合适的视图控件后,就会调用视图控件的touches方法来作具体的事件处理; touchesBegan… touchesMoved… touchedEn

事件的产生与传递 及 响应者链条

事件的产生与传递 正如我上图所总结的: 1.左边部分:我总结了事件传递的流程 2.中间部分:举例说明了实际情况 3.右边部分:一个View不能接受事件的情况 响应者链条 左边的情况,接收事件的initial view如果不能处理该事件并且她不是顶层的View,则事件会往它的父View进行传递.initial view的父View获取事件后如果仍不能处理,则继续往上传递,循环这个过程.如果顶层的View还是不能处理这个事件的话,则会将事件传递给它们的ViewController,如果ViewCon

iOS开发 - 事件的产生和传递

事件的产生和传递 发生触摸事件后,系统会将该事件加入到一个由UIApplication管理的事件队列中 UIApplication会从事件队列中取出最前面的事件,并将事件分发下去以便处理,通常,先发送事件给应用程序的主窗口(keyWindow) 主窗口会在视图层次结构中找到一个最合适的视图来处理触摸事件,这也是整个事件处理过程的第一步 找到合适的视图控件后,就会调用视图控件的touches方法来作具体的事件处理 touchesBegan- touchesMoved- touchedEnded-

accept()函数用来告诉Qt,事件处理函数“接收”了这个事件,不要再传递;ignore()函数则告诉Qt,事件处理函数“忽略”了这个事件,需要继续传递(看一下QWidget::mousePressEvent的实现,最为典型。如果希望忽略事件,只要调用父类的响应函数即可)

QEvent的accept()和ignore()一般不会用到,因为不如直接调用QWidget类的事件处理函数直接,而且作用是一样的,见下面的例子. 推荐直接调用QWidget的事件处理函数.而不是调用accept()和ignore(). 只有一种情况下,必须使用调用accept()和ignore(),那就是closeEvent(),在closeEvent()的事件处理函数中,必须调用accept()和ignore().即如果想窗口被关闭,那么必须显示调用event->accept():如果不想关

事件的产?生与传递 01

1.事件是怎么样产?生与传递的? 当发生一个触摸事件后,系统会将该事件加入到一个由UIApplication管理的事件队列中.    ->UIApplication会从事件队列中取出最前面的事件,并将事件分发下去以便处理.    ->主窗口会在视图层次结构中找到一个最合适的视图来处理触摸事件    ->触摸事件的传递是从父控件传递到子控件的.    ->如果一个父控件不能接收事件,那么它里面的了子控件也不能够接收事件. 2.一个控件什么情况下不能够接收事件? ->1.不接收用

android 触摸touch事件的派送和传递

1.touch事件从Activity开始向下逐层派发 一直派发到焦点控件进行处理 2.如果控件的事件处理方法返回true 则,该控件消费且持续关注此事件 否则,该事件向该控件的上一层容器传递 3.控件的touch监听器的onTouch方法 先于 控件本身的onTouchEvent执行 Touch事件派发和处理的方法 dispatchTouchEvent onInterceptTouchEvent(只有ViewGroup有该拦截方法) onTouchListener.onTouch onTouch

事件的产生,传递以及响应链

事件处理的整个流程总结: 1.触摸屏幕产生触摸事件后,触摸事件会被添加到由UIApplication管理的事件队列中(即,首先接收到事件的是UIApplication). 2.UIApplication会从事件队列中取出最前面的事件,把事件传递给应用程序的主窗口(keyWindow). 3.主窗口会在视图层次结构中找到一个最合适的视图来处理触摸事件.(至此,第一步已完成) 4.最合适的view会调用自己的touches方法处理事件 5.touches默认做法是把事件顺着响应者链条向上抛. 1.当

ios开发事件处理之 :二:事件的产生与传递

1.事件是怎么样产生与传递的? 当发生一个触摸事件后,系统会将该事件加入到一个由UIApplication管理的事件队列中.(队列是先进先出,而栈是先进后出) UIApplication会从事件队列中取出最前面的事件,并将事件分发下去以便处理.首先交给主窗口keywindow去处理 主窗口会在视图层次结构中找到一个最合适的视图来处理触摸事件,当找到最合适的view来处理事件时,该view会调用touchBegan等方法来对事件进行处理 2:时间传递的先后顺序以及注意点: 触摸事件的传递是从父控件

javascript事件监听中传递匿名函数(嵌套定义的命名函数)与命名函数的区别

项目中有个需求,事件第一次执行(立即执行)与后几次执行不同,但是直接传递定义好的命名函数,返回结果一样..如果通过匿名函数内再嵌套具名函数,结果就能返回正确!代码如下: 代码 <button class="button">按钮</button> (function(w) { //第一次定义需要执行的代码块 var fn = function() { console.log(1); }; var btn = document.querySelector('.but