事件的Cocoa Touch行为

时间:2009-01-20 01:56:01

标签: iphone cocoa-touch

关于在应用程序中调用事件方法的行为,我多次阅读过iPhone编程指南。

从指南中说: 当手指第一次触摸屏幕时,会调用touchesBegan。

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

当手指抬离屏幕时,会调用

touchesEnded。

问题变得有点模糊,涉及多个手指:

即使Multi-touch Interaction标志设置为NO,应用程序仍会继续调用当前正在跟踪另一个触摸的视图的touchesBegan方法。这对我来说似乎很直观。

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

值得注意的是,我在IB中以及以编程方式设置此标志以确保我没有遗漏某些内容。

谢谢, 科里

2 个答案:

答案 0 :(得分:0)

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

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

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

祝你好运!

答案 1 :(得分:0)

我弄清楚了我的问题,但首先要澄清多次触摸的正确功能:

如果您的视图的multipleTouchEnabled标志设置为NO,则如果第二次触摸应用于屏幕,则不应触发该视图的touchesBegan方法。

有了这个,解决我的问题:

我的观点包含多个子视图。视图负责处理自身和子视图的触摸。

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

换句话说,虽然UIApplication尊重视图的multiTouchEnabled标志,但响应器链中的其他视图却没有。