手势识别器解释原始触摸事件
事件包含当前多点触控序列的所有触摸
在iOS中,触摸是手指在屏幕上的存在或移动。手势具有一个或多个触摸,由UITouch
对象表示。例如,捏合手势具有两个触摸 - 屏幕上的两个手指从相反方向朝彼此移动。
事件包含多点触控序列中发生的所有触摸。多点触控序列从手指触摸屏幕开始,最后一个手指抬起时结束。随着手指移动,iOS将触摸对象发送到事件。多点触控事件由UIEventTypeTouches类型的UIEvent对象表示。
每个触摸对象只跟踪一个手指,并且持续时间与多点触控序列一样长。在该序列中,UIKit跟踪手指并更新触摸对象的属性。这些属性包括触摸的阶段,视图中的位置,其以前的位置和时间戳。
触摸阶段指示触摸何时开始,是否移动或静止,何时结束 - 即手指不再触摸屏幕时。如图1-4所示,应用程序在任何触摸的每个阶段都会收到事件对象。
图1-4 多点触控序列和触控阶段
应用接收触摸方法里的触摸
在多点触控序列中,应用程序会在触摸阶段出现新触摸或更改触摸时发送这些消息;它调用:
touchesBegan:withEvent:
方法(当一个或多个手指触摸屏幕时)。- touchesMoved:withEvent:方法,当一个或多个手指移动时。
- touchesEnded:withEvent:当一个或多个手指从屏幕上抬起时的方法。
- touchesCancelled:withEvent:当系统事件(例如来电)取消触摸序列时的方法。
每种方法都与触摸阶段相关联; 例如,touchesBegan:withEvent:方法与UITouchPhaseBegan相关联。触摸对象的阶段存储在其phase属性中。