关闭

iOS事件分发机制

标签: iosevent响应职责链
442人阅读 评论(0) 收藏 举报
iOS事件主要有两种:Touch Event, Motion Event.
本文重点介绍Touch事件.


首先,UIKit感知用户点击操作,生成UIEvent并将其加入到Active App的Event Queue中.
UIApplication从Event Queue中取出事件,并将其投递给UIWindow.
UIWidow根据Event的Point,尝试确定点击操作具体是在哪个View上发生的(Hit-Testing),具体方法为:
递归判断subView,直到找到Touch事件所在的最上层View.该View是处理Event的initial object.


接下来的处理流程,是以职责链(The Responder Chain)的方式实现的:
链上的每一个对象,都是事件处理者.如果对象没有实现对应的方法去捕获事件,事件将自动传递给下一位响应者.


iOS中能够处理事件的类,均从UIResponder派生.其中nextResponder属性,指明下一响应者.
具体到Touch事件,其职责链是按以下方式实现的:
1.UIView有Controller时,nextResponder是其Controller.
没有Controller时,nextResponder是其SuperView.
2.Controller的nextResponder,是其view的SuperView.
3.UIWindow的nextResponder,是UIApplication.
4.UIApplication的nextResponder,是nil.




由此可见,职责链基本是按照View Hierarchy路由.当前View不处理,传递给SuperView.(如果view直接隶属于Controller,会先交给Controller处理,再交给其SuperView).
而UIWindow是View Hierarchy的Root View,Event传递到他手里以后,它会转手给UIApplication.

而UIApplication会直接将收到的Event直接丢弃,故其nextResponder为nil.


最后,附官方文档:

https://developer.apple.com/library/ios/documentation/EventHandling/Conceptual/EventHandlingiPhoneOS/event_delivery_responder_chain/event_delivery_responder_chain.html

0
0
查看评论

iOS事件分发机制(一) hit-Testing

http://suenblog.duapp.com/blog/100031/iOS%E4%BA%8B%E4%BB%B6%E5%88%86%E5%8F%91%E6%9C%BA%E5%88%B6%EF%BC%88%E4%B8%80%EF%BC%89%20hit-Testing iOS事件分...
  • jeffasd
  • jeffasd
  • 2016-02-15 18:26
  • 387

android之View和ViewGroup事件分发机制分析(一)(View的事件分发机制)

要把安卓学好,自定义View,事件分发机制,自定义动画之类的是必须掌握的,如果不想弄得那么高级来自定义,也可以不学。当初自己也是看了很多相关的书籍和博客文章,理了很久的思路。现在事件分发机制的分析已经理清楚了,而且记在笔记本上也不好,所以就提到博客上来了,对于事件分发机制,什么是事件分发机制呢?这个...
  • gsw333
  • gsw333
  • 2016-07-25 19:10
  • 632

iOS事件的分发机制和响应者链(Swift)

当我们在设计自己的APP时,可能会想动态的响应事件.例如:屏幕上许多对象都能够发生触摸,我们必须决定哪一个对象来响应给定的事件并且知道对象是如何接受事件的。当用户事件产生的时候,UIKit会创建一个事件对象(event object),该对象包含了事件整个过程中所拥有的信息。并且该事件对象将处于A...
  • longshihua
  • longshihua
  • 2016-07-19 10:48
  • 2671

android事件分发机制解析(配流程图)

事件分发机制 一.点击事件传播路径 1.点击事件TouchEvent最先是到达Activity的,然后传给Activity对应的window,再传给DecorView,再传给id为content的ViewGroup,即我们通过setContentView设置的ViewGroup,以此到最后的vi...
  • sggdjfkf147896325
  • sggdjfkf147896325
  • 2016-07-20 11:29
  • 522

Android事件分发机制 详解攻略,您值得拥有

前言 Android事件分发机制是Android开发者必须了解的基础 网上有大量关于Android事件分发机制的文章,但存在一些问题:内容不全、思路不清晰、无源码分析、简单问题复杂化等等 今天,我将全面总结Android的事件分发机制,我能保证这是市面上的最全面、最清晰、最易懂的 ...
  • carson_ho
  • carson_ho
  • 2017-01-06 11:43
  • 38609

一步步理解Android事件分发机制

回想一下,通常在Android开发中,我们最常接触到的是什么东西?显然除了Activity以外,就是各种形形色色的控件(即View)了。 与此同时,一个App诞生的起因,终究是根据不同需求完成与用户的各种交互。而所谓的交互,本质就是友好的响应用户的各种操作行为。 所以说,有很多时候,一个控件(V...
  • ghost_Programmer
  • ghost_Programmer
  • 2016-07-21 18:57
  • 2715

Android ViewGroup事件分发机制

上一篇已经完整的解析了Android View的事件分发机制,今天给大家代码ViewGroup事件分发的源码解析~~凡是自定义ViewGroup实现各种滑动效果的,不可避免的会出现很多事件的冲突,对ViewGroup事件分发机制的了解,也有益于大家了解冲突产生的原因,以及对冲突进行处理~1、案例首先...
  • lmj623565791
  • lmj623565791
  • 2014-09-09 09:38
  • 78177

android 事件分发机制

前段时间做项目的时候,碰见listview
  • lanhuzi9999
  • lanhuzi9999
  • 2014-05-22 02:09
  • 20901

Android开发中的事件分发机制梳理

本文为事件分发的学习总结。 《Android开发艺术探索》一书中对事件分发做了很详细的介绍。 大神博客:http://blog.csdn.net/singwhatiwannaView的事件分发机制MotionEvent类 MotionEvent:手指接触屏幕后产生的事件,封装成了MotionEv...
  • android_zyf
  • android_zyf
  • 2017-03-05 12:55
  • 771

【Android面试笔记】(一)事件分发机制

首先我们必须了解三个方法 1.dispatchTouchEvent 2interceptTouchEvent      3.TouchEvent 下面先介绍第一个:dispatchTouchEvent public boolean diapatchTouchEven...
  • u011669081
  • u011669081
  • 2015-10-18 18:19
  • 1615
    个人资料
    • 访问:1980次
    • 积分:50
    • 等级:
    • 排名:千里之外
    • 原创:3篇
    • 转载:0篇
    • 译文:0篇
    • 评论:1条
    文章存档
    最新评论