1. iOS中的三种事件类型 触摸事件、加速计事件、远程事件。

触摸事件:通过触摸、手势进行触发(例如手指点击、缩放)

加速计事件:通过加速器进行触发(例如手机晃动,典型应用是微信摇一摇)

远程事件:通过其他远程设备触发(例如耳机控制按钮)

触摸事件的实现方法有四种,touchBegin/touchesMoved/touchesEnded/touchesCancelled

2. 触摸事件的传递

  要想响应触摸事件必须得有一个前提,就是该对象必须是响应者对象,继承了UIResponder的对象就是响应者对象,只有响应者对象才能够接收并处理事件

(1)事件是怎么的产生和传递"

①.当手指触摸屏幕后会产生 '触摸事件', 然后将事件加入UIApplication的管理事件队列中

②.UIApplication会取出事件队列中 '最前面的事件' 分发下去,事先分发给应用程序的主窗口中 'keyWindow'

③.主窗口接收到事件后,分发给自己的子控件,寻找最适合的接收事件的控件

④.找到 '最适合' 接收的控件后,调用控件的touchesBegin/touchesMoved/touchesEnded方法

"2、如何找到最合适的控件来处理事件?"

①.判断自己是否能接收触摸事件?

/*

控件不接收触摸事件的三种情况

1> 不接收用户交互 userInteractionEnabled=NO

2> 隐藏 hidden = YES

3> 透明 alpha = 0.0 ~ 0.01

*/

②.判断触摸点是否在自己身上?

/*

* 判断触摸点在不在自己身上,view有一个方法【-(BOOL)pointInside:withEvent:】

* 返回NO,就代表不在自己身边上,那不再遍历子控件

* 返回YES,代表点在自己向上,那继续遍历子控件

*/

③.从后往前遍历子控件,重复前面的两个步骤

④.如果没有符合条件的子控件,那么就自己最适合处理的控件

⑤.找到最适合的控件后就调用touchesBegin/touchesMoved/touchesEnded方法

(2)响应者链条

"什么是响应者链条"

①.由多个响应者对象连接起来的链条叫做响应者链条

②.什么是上一个响应者?

>如果当前这个view是控制器的view,控制器就是上一个响应者

>如果当前这个view不是控制器的view,那么父控件就是上一个响应者

③.利用响应者链条可以让多个控件处理同一个 "触摸事件"

"怎么让多个控件处理同一个 ‘触摸事件’ 事件?"

>在最后适合的控件里调用super的touchesBegan方法,这样就将事件传给上一个响应,上一个响应者也可以处理事件了

"3、小结:事件的完整处理过程"

①.先将事件对象由上往下传递(由父控制传给子控件),找到最适合的控件来处理

②.调用最合适的控件的touches...方法

③.如果调用了[super touch…],就会将事件顺着响应都链往上传递,传递给上一个响应者

④.接着上一个响应者就会调用的touches...方法

⑤.如果没有找到最适合的控件来处理事件,则将事件传回来窗口,窗口不处理事件,将事件传给UIApplication

⑥.如果Applicatoin不能处理事件,则将其丢弃

转载于:https://www.cnblogs.com/xiaofei993/p/5344995.html

iOS开发触摸事件的传递相关推荐

  1. iOS中触摸事件传递和响应原理

    系统响应阶段 1.手指触碰屏幕,屏幕感受到触摸后,将事件交由IOKit来处理. 2.IOKIT将触摸事件封装成IOHIDEvent对象,并通过mach port传递给SpringBoard进程. ma ...

  2. iOS:触摸事件、手势识别、摇晃事件、耳机线控

    概览 iPhone的成功很大一部分得益于它多点触摸的强大功能,乔布斯让人们认识到手机其实是可以不用按键和手写笔直接操作的,这不愧为一项伟大的设计.今天我们就针对iOS的触摸事件(手势操作).运动事件. ...

  3. iOS 一一 触摸事件和手势

    iOS触摸事件和手势 文章出处:http://www.jianshu.com/p/cb0314b72883 在iOS中,触摸表示用户手指触击屏幕及在屏幕上移动时,系统不断发送给应用程序对象,一个UIT ...

  4. IOS中触摸事件学习

    IOS中触摸事件学习 1. 事件的声明周期 2. 系统相应阶段 3. APP响应阶段 4. 触摸.事件.响应者 4.1 UITouch(触摸) 4.2 UIEvent(事件真身) 4.3 UIResp ...

  5. android触摸事件触摸点坐标,Android开发——触摸事件TouchEvent详解及其应用

    2020.8.8 Activity的功能: 1.管理界面的生命周期 2.接收事件(触摸事件) 一.触摸事件传递解析 touch事件的传递.png 当手指按下时会首先调用onUserInteractio ...

  6. android方向触摸事件,Android触摸事件如何传递?

    慕工程0101907 让我们看一个视觉示例.在此处输入图片说明发生触摸事件时,首先会向每个人通知该事件,从活动开始,一直到顶部的视图.然后,每个人都有机会处理该事件,从顶部的视图(触摸区域中Z顺序最高 ...

  7. Event Handling Guide for iOS——由触摸事件传递想到的

    先帖官方文档地址 https://developer.apple.com/library/ios/documentation/EventHandling/Conceptual/EventHandlin ...

  8. IOS UITouch 触摸事件,UIResponder 的作用

    IOS 中事件响应皆是通过UIResponder.我们可以执行UIResponder协议响应事件.这里我们用UIViewController做示例,UIViewController默认实现UIResp ...

  9. iOS开发系列--触摸事件、手势识别、摇晃事件、耳机线控

    -- iOS事件全面解析 概览 iPhone的成功很大一部分得益于它多点触摸的强大功能,乔布斯让人们认识到手机其实是可以不用按键和手写笔直接操作的,这不愧为一项伟大的设计.今天我们就针对iOS的触摸事 ...

最新文章

  1. [每日一题] OCP1z0-047 :2013-08-14 如何理解USING INDEX?...................................41
  2. jenkins的安装
  3. 在linux下php挂接mysql.so扩展的方法
  4. System.Drawing.Common workaround in .NET6
  5. Rock8247 bsp-Tornado-VXWorks Build up
  6. 绝对不可错过的图形学算法!迭代最近点算法——ICP算法
  7. 16查看走线长度_糟糕!丝印放到表层走线上面啦
  8. Data Guard 三种模式解释
  9. 大型门户网站架构分析[转]
  10. CPU的睿频、超线程、SIMD指令集等特性对密码算法性能的影响
  11. buck 与ldo效率
  12. php iconv translit,php iconv translit for removing accents: not working as excepted?
  13. 如何把txt文本转换成epub文件
  14. 如何删除电脑计算机用户账户,怎么删除电脑账户密码 如何删除电脑开机账户密码...
  15. 明源售楼系统技术解析 签约管理(二)
  16. jsp:使用request为页面添加静态数据。
  17. mysql biginteger java_java.math.BigInteger cannot be cast to java.lang.Integer以及mysql升级的问题...
  18. LEAD广告联盟,真的能够年入百万吗?
  19. 100个C语言的编程题
  20. ubuntu文件夹只读属性修改

热门文章

  1. Java面试宝典————基础篇
  2. php theexcerpt,wordpress的excerpt()函数的用法示例
  3. ausam3x 嵌入式linux,ATSAM3X8EA-AU - 微控制器, 32位, SAM3X系列, ARM 皮质-M3, 84nb
  4. php免费根据ip查城市,根据ip获取城市的方法
  5. Linux不能读取目录,关于Linux上面无法读取资源目录下文件的问题
  6. oracle 本年1月1号 yy,ORACLE 日期函数
  7. 基于JAVA springboot+mybatis 电商书城平台系统设计和实现
  8. 强制关机对电脑的影响_笔记本电脑需要每天关机吗?长期开机对电脑有影响么?...
  9. c语言怎么判断文件类型,判断你的文件是否为合法的PE文件和应用类型
  10. 计算机网络硬件脆弱性,计算机网络的脆弱性有哪几点