
iOS 中的事件响应与处理
展开全部
在事件(如触摸屏幕)产生后,系统是如何通知到你的 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 内部,一个事件会按照一个规则(视图层级关系)去遍历寻找这个事件的最佳响应者,但是这个响应者有可能不处理事件,那么它又需要沿着一定的规则(响应者链)去传递这个事件,如果最终都无人处理,那么将这个事件抛弃,也就是不处理。
先来看看什么是事件。
事件对应的对象为 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 接收到这个事件后, 开始传递事件
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询