触摸事件之事件传递

iOS中的事件有3类,触摸事件(单点,多点,手势)、传感器事件(加速度传感器)和远程控制事件。无论是哪种事件,都是系统本身先获得,是iOS系统来传给UIApplication的,由Application再决定交给谁去处理,所以如果我们要拦截事件,可以在UIApplication层面或者UIWindow层面去拦截。

UIView是如何判定这个事件是否是自己应该处理的呢?

iOS系统检测到一个触摸操作时会打包一个UIEvent对象,并放入Application的队列,Application从队列中取出事件后交给UIWindow来处理,UIWindow会使用hitTest:withEvent:方法来递归的寻找操作初始点所在的view,这个过程成为hit-test view。

        hitTest:withEvent:方法的处理流程如下:调用当前view的pointInside:withEvent:方法来判定触摸点是否在当前view内部,如果返回NO,则hitTest:withEvent:返回nil;如果返回YES,则向当前view内的subViews发送hitTest:withEvent:消息,所有subView的遍历顺序是从数组的末尾向前遍历,直到有subView返回非空对象或遍历完成。如果有subView返回非空对象,hitTest方法会返回这个对象,如果每个subView返回都是nil,则返回自己(返回自己是返回它的父类)。

上面的文字是复制的别人的博文具体参考:http://blog.csdn.net/sakulafly/article/details/18766339

树的递归遍历比较了解的话理解起来应该不难

时间: 2024-11-03 01:21:32

触摸事件之事件传递的相关文章

JS冒泡事件与事件捕获实例详解_javascript技巧

本文实例分析了JS冒泡事件与事件捕获.分享给大家供大家参考,具体如下: 案例 <!DOCTYPE html> <html> <head> <title>冒泡事件</title> <script type="text/javascript"> window.onload = function(){ window.onclick = function(){ alert("Window"); // 顶

从零开始学习jQuery (五) jquery事件与事件对象_jquery

一.摘要 事件是脚本编程的灵魂. 所以本章内容也是jQuery学习的重点. 本文将对jQuery中的事件处理以及事件对象进行详细的讲解.  二.前言 本篇文章是至今为止本系列内容最多的一篇, 足以可见其重要性.  大家反映要多列举示例. 我会在时间允许的情况下尽量多列举示例. 真正的投入生产使用的实例暂时还无法加入到文章中, 但是可能最后我会列举一些作品供大家借鉴. 另外本人水平有限, 因为我不是UI设计师. 文章可能有错误的地方, 希望大家帮忙指出, 一起学习一起进步. 在技术的世界里我们是没

从“陈一冰被黑”事件探索事件营销推广的方式

中介交易 SEO诊断 淘宝客 云主机 技术大厅 相信昨天晚上看吊环王陈一冰的比赛的朋友对于最后的结果都感到愤慨,今早一来就在腾讯新闻中看到奥运中,一条巨大的横幅,腾讯新闻上显示的是"吊环陈一冰完美表现摘银",当时自己就很诧异为何,表现已经很完美,却仅仅获得了银牌,然后点击进去一看,原来在奥运裁判之下,金牌是可以变成银牌的,好吧,这篇文章呢,就从百度实时热点"陈一冰被黑"事件探索事件营销推广的方式,也算是为了昨晚的一场比赛抒发一下自己的感情吧. 在百度实时热点中,&q

从零开始学习jQuery (五) 事件与事件对象

一.摘要 事件是脚本编程的灵魂. 所以本章内容也是jQuery学习的重点. 本文将对jQuery中的事件处理以及事件对象进行详细的讲解. 二.前言 本篇文章是至今为止本系列内容最多的一篇, 足以可见其重要性.大家反映要多列举示例. 我会在时间允许的情况下尽量多列举示例. 真正的投入生产使用的实例暂时还无法加入到文章中, 但是可能最后我会列举一些作品供大家借鉴. 另外本人水平有限, 因为我不是UI设计师. 文章可能有错误的地方, 希望大家帮忙指出, 一起学习一起进步. 在技术的世界里我们是没有任何

JavaScript动态添加事件之事件委托_javascript技巧

先给大家讲下什么是事件委托:通俗的讲,事件就是onclick,onmouseover,onmouseout,等就是事件,委托呢,就是让别人来做,这个事件本来是加在某些元素上的,然而你却加到别人身上来做,完成这个事件. 也就是:利用冒泡的原理,把事件加到父级上,触发执行效果. 其所谓的动态添加事件实质就是指js中的事件委托. 我们知道在js中,事件处理只能绑定在当前被选中的元素上,换句话也就是说,事件处理只能绑定在当前文档已经存在的元素上!但是,往往小伙伴们都会遇到一个问题就是,我的元素是后来动态

编写高质量代码改善C#程序的157个建议[C#闭包的陷阱、委托、事件、事件模型]

原文:编写高质量代码改善C#程序的157个建议[C#闭包的陷阱.委托.事件.事件模型] 前言 本文已更新至http://www.cnblogs.com/aehyok/p/3624579.html .本文主要学习记录以下内容: 建议38.小心闭包中的陷阱 建议39.了解委托的实质 建议40.使用event关键字对委托施加保护 建议41.实现标准的事件模型 建议38.小心闭包中的陷阱 首先我们先来看一段代码: class Program { static void Main(string[] arg

javascript-js定义的类中定义某控件挂事件,事件内部如何引用到定义的类

问题描述 js定义的类中定义某控件挂事件,事件内部如何引用到定义的类 function AA(obj){ this.a1="12"; this.a2="13"; obj.onclick=function(){ alert(this);//这里的this,其实是obj吧,而不是由AA定义出的对象 //要怎么引用到AA定义出的对象,如cc1()里的this } function cc1(){ alert(this);//这里的this是AA定义出的对象吧, } } 解决

如何解决ClickableSpan的点击事件和长按事件3事件冲突问题

问题描述 如何解决ClickableSpan的点击事件和长按事件3事件冲突问题 如何解决ClickableSpan的点击事件和长按事件3事件冲突问题

javascript下对于事件、事件流、事件触发的顺序随便说说_javascript技巧

1.首先我们来了解几个概念,"事件","事件流","事件名称","事件处理函数/事件监听函数,也许是"老生常谈",知道的朋友可以越过. 事件: 事件是用户自身或浏览器进行的特定行为.如:用户点击 也就是常用的click事件 事件流:多个事件 按一定顺序触发 形成了事件流 事件名称:如上面所讲的click就是事件名 事件处理函数/事件监听函数(Dom的叫法)就是 事件触发后的处理函数,如obj.onclick=fn;函