事件的产?生与传递 01

1.事件是怎么样产?生与传递的?

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

2.一个控件什么情况下不能够接收事件?

->1.不接收用户交互时不能够处理事件
            userInteractionEnabled = NO
->2.当一个控件隐藏的时候不能够接收事件
            Hidden = YES的时候
->3.当一个控件为透明白时候也不能够接收事件
   注意:UIImageView的userInteractionEnabled默认就是NO,
   因此UIImageView以及它的子控件默认是不能接收触摸事件的

3.事件传递的完整过程?

->1.在产生一个事件时,系统会将该事件加入到一个由UIApplication管理的事件队列中,
->2.UIApplication会从事件队列中取出最前面的事件,将它传递给先发送事件给应用程序的主窗口.
->3.主窗口会调用hitTest方法寻找最适合的视图控件,找到后就会调用视图控件的touches方法来做具体的事情.
->4.当调用touches方法,它的默认做法, 就会将事件顺着响应者链条往上传递,
->5.传递给上一个响应者,接着就会调用上一个响应者的touches方法

时间: 2024-10-25 00:50:07

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

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

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

事件的产生与传递

事件的产生和传递: 发生触摸事件以后,系统会将该事件加入到一个由UIApplication管理的事件队列中, UIApplication会从事件队列中取出最前面的事件,并将事件分发下去以便处理,通常先发送事件给应用程序的主窗口(keyWindow) 主窗口会在视图层次机构中找到一个最合适的视图来处理触摸事件,但是这仅仅是事件处理的第一步.找到合适的视图控制器后,就会调用视图控件的touchs方法来做具体的事件处理. UIView不接触事件的三种情况: 1.userIteractionEnable

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

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

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

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

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

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

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

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

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.当

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

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