iOS开发触摸事件的传递
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开发触摸事件的传递相关推荐
- iOS中触摸事件传递和响应原理
系统响应阶段 1.手指触碰屏幕,屏幕感受到触摸后,将事件交由IOKit来处理. 2.IOKIT将触摸事件封装成IOHIDEvent对象,并通过mach port传递给SpringBoard进程. ma ...
- iOS:触摸事件、手势识别、摇晃事件、耳机线控
概览 iPhone的成功很大一部分得益于它多点触摸的强大功能,乔布斯让人们认识到手机其实是可以不用按键和手写笔直接操作的,这不愧为一项伟大的设计.今天我们就针对iOS的触摸事件(手势操作).运动事件. ...
- iOS 一一 触摸事件和手势
iOS触摸事件和手势 文章出处:http://www.jianshu.com/p/cb0314b72883 在iOS中,触摸表示用户手指触击屏幕及在屏幕上移动时,系统不断发送给应用程序对象,一个UIT ...
- IOS中触摸事件学习
IOS中触摸事件学习 1. 事件的声明周期 2. 系统相应阶段 3. APP响应阶段 4. 触摸.事件.响应者 4.1 UITouch(触摸) 4.2 UIEvent(事件真身) 4.3 UIResp ...
- android触摸事件触摸点坐标,Android开发——触摸事件TouchEvent详解及其应用
2020.8.8 Activity的功能: 1.管理界面的生命周期 2.接收事件(触摸事件) 一.触摸事件传递解析 touch事件的传递.png 当手指按下时会首先调用onUserInteractio ...
- android方向触摸事件,Android触摸事件如何传递?
慕工程0101907 让我们看一个视觉示例.在此处输入图片说明发生触摸事件时,首先会向每个人通知该事件,从活动开始,一直到顶部的视图.然后,每个人都有机会处理该事件,从顶部的视图(触摸区域中Z顺序最高 ...
- Event Handling Guide for iOS——由触摸事件传递想到的
先帖官方文档地址 https://developer.apple.com/library/ios/documentation/EventHandling/Conceptual/EventHandlin ...
- IOS UITouch 触摸事件,UIResponder 的作用
IOS 中事件响应皆是通过UIResponder.我们可以执行UIResponder协议响应事件.这里我们用UIViewController做示例,UIViewController默认实现UIResp ...
- iOS开发系列--触摸事件、手势识别、摇晃事件、耳机线控
-- iOS事件全面解析 概览 iPhone的成功很大一部分得益于它多点触摸的强大功能,乔布斯让人们认识到手机其实是可以不用按键和手写笔直接操作的,这不愧为一项伟大的设计.今天我们就针对iOS的触摸事 ...
最新文章
- [每日一题] OCP1z0-047 :2013-08-14 如何理解USING INDEX?...................................41
- jenkins的安装
- 在linux下php挂接mysql.so扩展的方法
- System.Drawing.Common workaround in .NET6
- Rock8247 bsp-Tornado-VXWorks Build up
- 绝对不可错过的图形学算法!迭代最近点算法——ICP算法
- 16查看走线长度_糟糕!丝印放到表层走线上面啦
- Data Guard 三种模式解释
- 大型门户网站架构分析[转]
- CPU的睿频、超线程、SIMD指令集等特性对密码算法性能的影响
- buck 与ldo效率
- php iconv translit,php iconv translit for removing accents: not working as excepted?
- 如何把txt文本转换成epub文件
- 如何删除电脑计算机用户账户,怎么删除电脑账户密码 如何删除电脑开机账户密码...
- 明源售楼系统技术解析 签约管理(二)
- jsp:使用request为页面添加静态数据。
- mysql biginteger java_java.math.BigInteger cannot be cast to java.lang.Integer以及mysql升级的问题...
- LEAD广告联盟,真的能够年入百万吗?
- 100个C语言的编程题
- ubuntu文件夹只读属性修改
热门文章
- Java面试宝典————基础篇
- php theexcerpt,wordpress的excerpt()函数的用法示例
- ausam3x 嵌入式linux,ATSAM3X8EA-AU - 微控制器, 32位, SAM3X系列, ARM 皮质-M3, 84nb
- php免费根据ip查城市,根据ip获取城市的方法
- Linux不能读取目录,关于Linux上面无法读取资源目录下文件的问题
- oracle 本年1月1号 yy,ORACLE 日期函数
- 基于JAVA springboot+mybatis 电商书城平台系统设计和实现
- 强制关机对电脑的影响_笔记本电脑需要每天关机吗?长期开机对电脑有影响么?...
- c语言怎么判断文件类型,判断你的文件是否为合法的PE文件和应用类型
- 计算机网络硬件脆弱性,计算机网络的脆弱性有哪几点