获得iPhone触控输入的可靠方法?

时间:2010-03-01 03:58:31

标签: iphone touch

我开始使用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个触摸,你将不会收到“触地”消息。更糟糕的是,除非您将所有手指从屏幕上移除,否则您将无法可靠地获取所有“修饰”消息。

如果你用6个手指触摸,然后松开3,然后再触摸另外3个仍然向下,你会得到“触地”但是如果你松开它,有时你会得到“修饰”有时候你会“T

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

是否有更好的api用于获取触摸输入?是否至少有一个功能,您可以调用以可靠地获取屏幕当前是否被触摸?这样我可以在所有手指被释放后重置我的经理。

编辑:

对,必须有一些我不知道的东西。因为目前计算器做了一些我不能用这些回调做的事情。

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

如果我触摸屏幕按钮熄灭,现在如果我再次触摸屏幕,按钮会释放,冷却,不允许多次触摸。现在,如果我再向屏幕添加4个手指,总共6个,屏幕应该会断开,当我释放这6个手指时,应用程序不应该获得任何“向上”回调。然而,当我释放所有这些并再次触摸时,按钮按下,所以它知道我释放了所有这些手指!如何??

2 个答案:

答案 0 :(得分:2)

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

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

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

答案 1 :(得分:1)

它停止工作,因为5是iPhone和iPod目前支持的最大触摸量。不用担心我不知道。