用于多点触控的触控追踪

时间:2013-08-01 10:25:08

标签: ios ios6 multi-touch

我正在使用GLKit创建游戏(不使用Cocos2d),我基本上需要两个"按钮" - 每个按钮250点宽,并以横向模式放置在相对侧。 MultipleTouch是YES,因为我需要跟踪多个触摸。

在touchesbegan中,我确定touch.x< = 250(按钮1)或> = view.bounds.size.width - 250(按钮2)。基于此,我将BOOL设置为YES以确定状态。

在touchesended中我想知道用户何时不再是"按"按钮1或按钮2.事情是 - 我不能只测试视图中触摸发生的位置,因为用户可能已经移动了手指,因此它不再超过"按钮"这是最初的压力。这意味着如果用户通过按下按钮1来开始触摸,但是将手指移动到按钮边界之外然后抬起手指 - 状态仍然是“是”。

有没有一种可靠的方法来可靠地跟踪TouchesEnded中首次触摸的位置?任何指向源代码的指针都将受到高度赞赏。

修改 这是我创建的代码:

请注意,我知道此代码错误,因为它只跟踪一次触摸。但是,我想要实现的是当用户按下左键并将取景器移出该按钮时..我需要知道touchesEnded中的触摸相当于之前按钮中的触摸,因此我知道该按钮不再被按下"。

- (void) touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
    UITouch *touch = [touches anyObject];

    // Determine where the touch happened
    CGPoint p = [touch locationInView:self.view];

    // If the user pressed the left gutter then break
    if ( p.x <= 250 )
        isBreaking = YES;

    // If the user pressed the right gutter then accelerate
    if ( p.x >= (self.view.bounds.size.width - 250) )
        isAccelerating = YES;
}


- (void) touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
{
    UITouch *touch = [touches anyObject];

    // Determine where the touch happened
    CGPoint p = [touch locationInView:self.view];

    // If the user pressed the left gutter then stop break
    if ( p.x <= 250 )
        isBreaking = NO;

    // If the user pressed the right gutter then stop accelerate
    if ( p.x >= (self.view.bounds.size.width - 250) )
        isAccelerating = NO;
}

1 个答案:

答案 0 :(得分:1)

我认为我找到了解决方案,但我尚未对其进行测试:http://www.blumtnwerx.com/blog/2009/06/taming-touch-multi-touch-on-the-iphone/

我真正需要知道的是文档:

  

UITouch对象在多点触控序列中是持久的。处理事件时,永远不应保留UITouch对象。如果你   你需要保持从一个阶段到另一个阶段的触摸信息   应该从UITouch对象复制该信息。