一、UITouch 理解 3 要点
- 一个 UITouch 对象, 就是一根手指触摸一次屏幕。 它包含了 “触摸屏幕 — 滑动 — 离开屏幕” 整个过程。 所以 UITouch 有个 phase 属性,记录了 整个过程的所有3个状态。由于一个电话或者其他事件可能会突然中断用户的操作,所以 UITouch 还外有 1 个取消状态。一个 UITouch 每当进入一次新的状态,它的一些显而易见的属性都会随之变化。如,位置、前一个位置、时间戳(timestamp)。不过当一个 UITouch 表面上从一个 View 移动到另一个 View 上时,UITouch 的 view 和 window 属性也不会变化。换句话说,UITouch 一发生就和 UITouch 最开始发生的( initial )的 view 绑定了。
- 如果一个 UITouch 紧接着上一个 UITouch 发生,只要满足两个 UITouch 在一定时间、一定范围的条件,那么第二个 UITouch 就不算一个完全独立的 UITouch。一个明显的属性是 tapcount,即点击次数,其实这里理解成第几次点击更为确切。tapCount 至少为 1,可以为 2,3,4... ... 等等。他们分别意味着单击,双击,三连击等等动作。
- UITouch 有个 UIGestureRecognizers 数组,里面装了所有接受该 UITouch GR。如果没有 GR 接收,那么该数组为空。
二、UIEvent 理解 2 要点
- 一个 UIEvent 代表一个事件,它是比 UITouch 更为抽象的对象,相当于把 UITouch 或者其他行为包装了一下。 一个 UIEvent 可以包含一个 UITouch(单指触控)或者 多个 UITouch (多指触控)。也可以包含设备(如 iPhone )晃动、远程遥控(如通过耳机线调整音量)等行为。所以UIEvent 有一个 type 属性,他可以是上句所说的 3 种 type的任意一种。种类型对应一类行为。同时它还有一个子类型属性,是从 3 个主类型里派生出来的。如,remoteControl(远程遥控) 里有 remoteControlPlay, remoteControlPause等等子类型。
- UIEvent 最经常包装的行为就是 UITouch。所以UIEvent 明目张胆地提供了 4 个返回 UITouch 集合(NSSet ) 的方法。他们分别从 view、window、GR中返回,allTouches 返回所有的 UITouch。
三、Timestamp 理解
- 简单来讲,时间戳记录了自从上次开机的时间间隔。它的类型是 NSTimeInterval,见文知意,很好理解。