一根手指触摸到屏幕之后就会产生一个UITouch实例,多根手指触摸则会产生多个。UITouch是一个可以表示屏幕上发生触摸的位置、大小、移动和力的类,代表了一次触摸。一根或多根手指触摸到屏幕、移动或静止、离开屏幕,这构成了一个完整的触摸事件,在此过程中系统将不断发送事件给视图实例。事件实例涵盖了一个多点触摸实例的序列,其中包括第一根手指碰到屏幕,随后其他手指触摸的事件,以及手指在屏幕上的移动事件。当最后一根手指离开屏幕时,这个序列就结束了。在触摸的每个阶段,视图实例都会收到不同的触摸信息。
触摸信息分时间和空间两个维度,时间维度的信息就是触摸的不同阶段:触摸开始、正在移动或处于静止状态、结束时手指离开屏幕。如果在触摸的同时有其他更高优先级的系统事件发生,则会取消当前的触摸,比如有电话打进。整个触摸事件的过程如图14.1.1所示:
(www.xing528.com)
图14.1.1 触摸的三个阶段
触摸信息的空间维度是其在当前视图或窗口中的位置信息以及可能有的之前的位置信息(如果发生过移动)。当一根手指接触屏幕时,触摸实例就和某个窗口或视图绑定起来了,而这个绑定在触摸事件的整个生命周期都会得到维护。如果有多个接触同时发生,则只有被同一个视图绑定的触摸才会被一起处理。如果两个触摸事件发生的间隔时间很短,那么只有当它们被绑定到同一个视图时,才会被处理为多点触摸事件。
UIEvent的实例代表了一个事件,其中会包含当前触摸序列中的所有触摸实例。在一个触摸序列发生的过程中,对应于特定手指的UITouch实例永远是同一个。在跟踪手指移动的过程中,UIKit框架会对UITouch实例中的属性进行修改,包括触摸阶段、触摸位置以及时间戳等,我们可以在代码中检查这些属性的值来决定如何响应事件。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。