iPhone触摸屏事件

时间:2010-06-01 16:34:11

标签: iphone events touch

在iPhone SDK中,有触摸事件出现时调用的touchesBegan,touchesEnded和touchesMoved函数。我的问题是当我把手指放在屏幕上并且我没有移动它时,无法知道屏幕上是否有手指。有没有办法获得当前的触摸屏状态?

在任何touchesBegan,touchesEnded和touchesMoved函数中,我可以使用fallowing代码来了解每次触摸的状态,但在我们之外我不能:|

NSSet *allTouches = [event allTouches];
for(GLuint index = 0; index < [allTouches count]; ++index)
{
    UITouch *touch = [[allTouches allObjects] objectAtIndex:index];
    if([touch phase] != UITouchPhaseCancelled)
    {
        CGPoint touchPoint = [touch locationInView:self];
        //do something with touchPoint that has state [touch phase]
    }
}

2 个答案:

答案 0 :(得分:1)

您应该保留当前触摸所有点的列表。确保只保留UIEventUITouch个对象(它们不能保证长寿) - 而是创建自己的数据数据结构。您需要的几率就是跟踪当前触摸点的位置。

答案 1 :(得分:0)

如果您不想修复破损的设计,为什么不保留正在运行的活动触摸列表来解决您的问题?

NSMutableSet * touch;

在touchesBegan中添加它们,在touchesEnded和touchesCancelled中删除它们......

您可以使用“全局”对象(即单例)来跟踪这些对象并同步数据访问。我不知道如何查询这个集合会比直接向UIKit询问这些信息有所不同。

如果您需要有关标准UIKit对象(即UIButton)的信息,您可能需要对这些对象进行子类化 - 我不确定您是否可以在所有类中获得所需的效果(因为它们 - 或者它们的子视图 - 可以处理以他们想要的任何方式接触。)