代码之家  ›  专栏  ›  技术社区  ›  matt

获取iPhone Touch输入的可靠方法?

  •  0
  • matt  · 技术社区  · 15 年前

    我开始使用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个手指再触摸,你会得到“向下触摸”,但如果你松开它,有时你会得到“向上触摸”,有时你不会。

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

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

    编辑:

    是的,一定是我丢了什么东西。因为现在计算器做了一些我不能做的事情。

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

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

    2 回复  |  直到 15 年前
        1
  •  2
  •   bddckr    15 年前

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

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

    如果您想知道触摸是否因被提起而结束,请确保检查Uitouch的相位属性。

        2
  •  1
  •   Stefan Arentz    15 年前

    它停止工作是因为5是iPhone和iPod当前支持的最大触摸次数。恐怕不行。