我有一个 iPad 应用程序,它广泛使用各种风格的 UIGestureRecognizers。一般来说,我是一个大粉丝。我对 UIPinchGestureRecognizer 有一个烦人且非常具体的问题:
考虑用户做出捏合手势的场景。然后,在不移动一根手指的情况下,移开另一根手指并将其替换到不同的位置并继续捏合。(这并不像听起来那么不可能)。
我的问题似乎特别在于 UIGestureRecognizer 通常无法注意到手指何时离开屏幕并触发任何类型的动作。我在其他地方(touchesBegan 和 touchesEnded)也注意到了这一点,但我已经能够绕过它。这次不行。
以下是 UIGestureRecognizer 中该操作的外观:
- UIGestureRecognizerStateBegan,随着紧要关头的开始。
- n UIGestureRecognizerStateChangeds,同时捏变。
- 用户移开手指时的 尴尬沉默。
- 当用户更换手指时,尴尬的沉默,可能很远。
- 另一个 UIGestureRecognizerStateChanged,随着捏的恢复。5.
现在,我在第 5 步遇到了问题。由于在第 3 步和第 4 步处理程序中没有发生任何事情,因此它从第 2 步和第 5 步中的 UIGestureRecognizerStateChangeds 完美无缝过渡,但发生了很多事情。对于处理程序来说,看起来用户刚刚进行了令人难以置信的快速捏合,在处理程序消息之间的时间内,叛逆的手指可能会移动数百个屏幕单位。
现在,如果用户不可能真正快速地进行捏合,我可以在更新之间允许的手指位置增量上设置一个阈值。但这是可能的。快速捏合手势确实可以让用户的手指移动这么远的距离。所以问题的高潮是这样的;UIPinchGestureRecognizer 无法将上述奇怪情况与快速捏合手势区分开来。我需要以非常不同的方式处理这些问题,而现在我无法区分它们。为什么当手指离开屏幕时操作系统不能告诉我?这是电容屏硬件的功能还是操作系统错误?还是……故意设计……?