2009-01-20 95 views
0

我已经多次关于在应用程序中调用事件方法的行为的iPhone编程指南。事件的可可触摸行为

从指南所说: touchesBegan在手指首次触摸屏幕时被调用。

touchesMoved当屏幕上的手指移动时调用。

touchesEnded在手指离开屏幕时被调用。

问题变得有点混浊用多个手指都参与:

即使设置为NO的多点触控交互标志,应用程序继续调用当前跟踪另一触摸视图的的touchesBegan方法。这似乎对我来说很直观。

这是正确的行为吗?我认为新的UITouch(甚至添加到正在跟踪的当前事件)不会触发touchesBegan方法。

值得注意的是,我在IB中设置了这个标志以及编程方式以确保我没有错过任何东西。

感谢, 科瑞

回答

0

我想通了,我的问题,但首先要澄清多点触摸的正常功能:

如果您的视图的multipleTouchEnabled标志设置为NO,该视图的的touchesBegan方法应该不火,如果第二触摸被施加到一个屏幕。

因此,我的问题的解决方案:

我的看法包含几个子视图。该视图负责处理触摸自身和子视图。

当我的代码运行不正常时,我有子视图的userInteractionEnabled = YES。这意味着当子视图被触摸时,它会将触摸转发给超级视图,无论超级视图是否跟踪另一触摸。

换句话说,虽然UIApplication尊重视图的multiTouchEnabled标志,但响应者链中的其他视图不会。

0

是的,我相信这是正确的行为。您可以跟踪每个触摸事件的位置,所以我想你只需要构建你的逻辑,这样你处理:

UITouch *touch = [[allTouches allObjects] objectAtIndex:0]; 

获得第一触摸和objectAtIndex:1第二。我认为它会达到四五个(不确定,请参阅文档)。

祝你好运!