我认为这个问题值得提出自己的问题。使用附加到我的另一个问题的解决方案的代码,我发现了此处描述的问题。
我将主视图控制器设置为 UIGestureRecognizerDelegate,并且我实现了touchesBegan
、touchesMoved
、touchesEnded
,并对touchesCancelled
我的解决方案进行了编程,假设对于每个带有事件的触摸对象,同一个对象touchesBegan
都会有一个touchesEnded
或touchesCancelled
事件。不过,我发现情况并非如此。
场景:以下事件按此顺序发生。
用户开始手势 1,触摸屏幕并滑动手指。
用户开始手势 2,在不同位置触摸屏幕。
用户继续在屏幕的相应部分滑动两个手指。
用户将手指从屏幕上抬起以执行手势 2。
用户继续手势 1。
用户将手指从屏幕上抬起以执行手势 1。
使用NSLog
捕获触摸事件的细节,我发现手势1和手势2使用了一个单独的触摸对象。但是手势1都调用了while touchesBegan
、、touchesMoved
和,而手势2只调用了和。事件不是要求它。touchesEnded
touchesBegan
touchesMoved
touchesCancelled
touchesEnded
那么,如果touchesCancelled
没有调用手势 2,我如何判断手势 2 何时结束?
编辑:我发现另一篇有类似症状的帖子。不过,我的大多数子视图都是以编程方式创建的。我会尝试那里为其他人建议的。不过,我怀疑这是同一个问题,因为在我的测试中,触摸位置不在其他视图附近。
另一个编辑:按照我之前编辑中发布的链接中的建议,我查看了子视图,其中一个检查了用户交互。取消选中后,行为略有不同。现在,在任何触摸事件中都不会注意到第二次触摸。我一定缺少一些基本的东西。顺便说一下,主视图和检查用户交互的视图都占用相同的空间(一个封装另一个)。