0

我开始使用 MoveMe 示例来使触摸输入正常工作。

基本上,我定义了这两个回调函数来获取我的触摸输入:

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event 
{

    for ( UITouch* touch in touches )
    {
        printf("touch down");
    }
}



- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event 
{
    for ( UITouch* touch in touches )
    {
        printf("touch up");
    }
}

这可以正常工作,直到您一次在屏幕上触摸超过 5 次。然后它会停止正常工作,如果屏幕上的触摸超过 5 次,您将不会收到“touch down”消息。更糟糕的是,除非您将所有手指从屏幕上移开,否则您将无法可靠地获得所有“修饰”消息。

如果你用 6 个手指触摸,然后松开 3 个手指,然后在其他 3 个手指仍然向下触摸的情况下再次触摸,你会得到“触摸向下”,但如果你松开它,有时你会得到“触摸向上”,有时你不会。

这几乎使跟踪触摸变得不可能,并且通常会导致触摸在传递给我的触摸管理器时永久“卡住”。

是否有更好的 api 用于获取触摸输入?是否至少有一个函数可以调用来可靠地获取当前是否触摸屏幕?这样,当所有手指都松开时,我可以重置我的经理。

编辑:

对,一定有我遗漏的东西。因为目前计算器做了一些我不能用这些回调做的事情。

它一次只接受一个触摸,如果屏幕上的触摸不止一个,它会“取消”所有触摸,但它必须跟踪它们才能知道屏幕上有“多个”触摸。

如果我触摸屏幕按钮会下降,现在如果我在屏幕上添加另一个触摸,按钮就会释放,很酷,不允许超过一次触摸。现在,如果我在屏幕上再添加 4 个手指,总共 6 个,屏幕应该会坏掉,当我释放这 6 个手指时,应用程序不应该得到任何“向上”回调。然而,当我释放所有手指并再次触摸时,按钮按下,所以它知道我释放了所有手指!如何??

4

2 回答 2

2

您遇到的问题是 iPhone 和 iPod touch 最多同时支持五次触摸(手指仍在触摸屏幕)。这可能是硬件限制。
(正如 St3fan 已经告诉你的那样。)

如果同时有超过 5 个触摸,系统将取消所有触摸: touchesCancelled:withEvent: (这可能是导致奇怪行为的原因,只有一些触摸调用 touchesEnded:withEvent:)

如果你想知道一个触摸是否结束并且它是因为它被抬起而结束的,那么一定要检查 UITouch 的相位属性。

于 2010-03-01T17:45:54.230 回答
1

它停止工作,因为 5 是 iPhone 和 iPod 当前支持的最大触摸次数。恐怕没有办法。

于 2010-03-01T04:01:43.977 回答