iOS 中的事件响应与处理

 我来答
新科技17
2022-06-06 · TA获得超过5977个赞
知道小有建树答主
回答量:355
采纳率:100%
帮助的人:79.1万
展开全部
在事件(如触摸屏幕)产生后,系统是如何通知到你的 App,在 App 内部是如何进行传递,最终又是如何确定最终的响应者的。

这些肯定是有规则的,在 App 内部,一个事件会按照一个规则(视图层级关系)去遍历寻找这个事件的最佳响应者,但是这个响应者有可能不处理事件,那么它又需要沿着一定的规则(响应者链)去传递这个事件,如果最终都无人处理,那么将这个事件抛弃,也就是不处理。

先来看看什么是事件。

事件对应的对象为 UIEvent ,它有一个属性为 type,是 EventType 类型,EventType 是一个枚举类型:

所以 iOS 中的事件有四种:

触摸事件就是我们的 手指 或者 苹果的 Pencil(触笔) 在屏幕中所引发的互动,比如轻点、长按、滑动等操作,是我们最常接触到的事件类型。触摸事件对象可以包含 一个或多个触摸 ,并且每个触摸由 UITouch 对象表示。当触摸事件发生时,系统会将其沿着线路传递,找到适当的响应者并调用适当的方法,例如 touchedBegan:withEvent: 。响应者对象会根据触摸来确定适当的方法。
触摸事件分为以下几类:

触摸事件对应的对象为 UITouch 。

iPhone 内置陀螺仪、加速器和磁力仪,可以感知手机的运动情况。iOS 提供了 Core Motion 框架来处理这些运动事件。根据这些内置硬件,运动事件大致分为三类:

不过官方文档中指出,这些都是属于 Core Motion 库框架 ,Core Motion 库中的事件直接 由 Core Motion 内部进行处理 ,不会通过响应者链,所以 UIKit 框架能接收的事件暂时只包括摇一摇 (EventSubtype.motionShake)。

远程控制事件允许响应者对象 从外部附件或耳机接受命令 ,以便它可以管理音频和视频。目前 iOS 仅提供我们远程控制音频和视频的权限,即对音频实现暂停/播放、上一曲/下一曲、快进/快退操作。以下是它能识别的类型:

iOS 9.0 之后提供了 3D Touch 事件,通过使用这个功能可以做如下操作:

我们一般说的事件传递的起点在于 UIApplication 所管理的事件队列中开始 分发 的时候,但事件真正的 起点 在于你 手指触摸到屏幕 的那一刻开始(以触摸事件为例),那么在触摸屏幕到事件队列开始分发发生了什么?我们就以一个触摸事件来说明这个过程。

7. Source0 回掉内部,将 IOHIDEvent 对象转化为 UIEvent

UIWindow 接收到这个事件后, 开始传递事件
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式