iOS-事件处理

房东的猫 提交于 2020-03-26 07:16:18

一.事件的基本概念

1.事件是当用户手指触击屏幕及在屏幕上移动时,系统不断发送给应用程序的对象

2.系统将事件按照特定的路径传递给可以对其进行处理的对象

3.在iOS中,一个UITouch对象表示一个触摸,一个UIEvent对象表示一个事件。事件对象中包含与当前多点触摸序列相对应的所有对象,还可以提供与特定视图或窗口相关联的触摸对象

二.触摸的基本概念

1.触摸信息有时间和空间两方面,时间方面的信息称为阶段(phrase),表示触摸是否刚刚开始,是否正在移动或处于静止状态,以及何时结束----也就是手指何时从屏幕抬起。

2.触摸信息还包括当前在视图或窗口中的位置信息,以及之前的位置信息(如果有的话)。当一个手指接触屏幕时,触摸就和某个窗口或视图关联在一起,这个关联在事件的整个生命周期都会得到维护。

1.当一个或多个手指触碰屏幕时,发送[touchesBegan : withEvent :]消息

2.当一个或多个手指在屏幕上移动时,发送[touchesMoved : withEvent :]消息

3.当有一个或多个手指离开屏幕时,发送[touchesEnded : withEvent]消息

三.响应者链

1.响应者链是一个响应者对象的连接序列,事件或动作消息(或菜单编辑消息)一次传递。它允许响应者对象把事件处理的职责转交给其它更高层的对象。应用程序通过向上传递一个事件来查找合适的处理对象。因为点击检测视图也是一个响应者对象,应用程序在处理触摸事件时也可以利用响应者链。

2.由多个响应者对象组成的链。

3.iOS中所有能响应事件(触摸,晃动,远程事件)的对象都是响应者。

4.系统定义了一个抽象的父类UIResponder来表示响应者。其子类都是响应者。

检测顺序:

UIApplication ->UIWindow -> rootViewController ->viewA ->viewB

viewC ->viewD ->viewE(检测到触摸视图)

响应顺序:

和检测顺序正好相反

 

1.检测到响应者后,实现touchesBegan:withEvent :等方法,即处理事件

2.如果响应者没有处理事件,事件会向下传递。如果没有响应者处理,则丢弃触摸事件

3.事件处理的顺序与触摸检测查询相反

4.触摸的子视图->view ->viewController ->window ->UIApplication

响应者链处理原则:

1.点击检测视图或者第一响应者传递事件或动作消息给它的视图控制器(如果有的话),如果没有一个视图控制器,就传递给他的父视图

2.如果一个视图或者它的视图控制器不能处理这个事件或动作消息,它将传递给该视图的父视图

3.在这个视图层次中的每个后续的父视图遵循上述的模式,如果它不能处理这个事件或动作消息的话

4.最顶层的视图如果不能处理这个事件或动作消息,就传递给UIWindow对象来处理

5.如果UIWindow对象也不能处理,就传给单件应用程序对象UIApplication,如果应用程序对象也不能处理这个事件或动作消息,将抛弃它

四.手势

1.手势识别器是对触摸事件做了封装,手势识别器本身起到了识别作用

2.手势识别器是iOS中比较抽象的一个类,用于识别一个手势,所谓手势:有规律的触摸

手势分类:

 

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!