复杂的iOS多点触控互动 - 任何建议?

时间:2011-12-02 00:44:00

标签: ios

我已经将UIView子类化,它已经处理了单个触摸和拖动。我希望增强此视图的交互,以便在拖动时,如果用户用第二根手指触摸(视图中的任何其他位置),则系统会打印一条消息。我对代码进行了抨击:

在我的头文件中,我已声明:

NSString *key; // This unique key identifies the first touch

我的.m文件:

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

    for (UITouch *t in touches) {
        if (key == NULL)
        {
            key = [[[NSValue valueWithPointer:t] description] copy];
        }
        if ([key isEqualToString:[[NSValue valueWithPointer:t] description]])
        {
            NSLog(@"calling parent to handle single touch");
            [super touchesBegan:[NSSet setWithObject:t] withEvent:event];
        }
        else
        {
            [self twoTouchDetected];
        }
    }
}

-(void) touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
{
    for (UITouch *t in touches) {
        if ([key isEqualToString:[[NSValue valueWithPointer:t] description]])
        {
            [super touchesMoved:[NSSet setWithObject:t] withEvent:event];
        }
    }
}

-(void) touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
{
    for (UITouch *t in touches) {
        if ([key isEqualToString:[[NSValue valueWithPointer:t] description]])
        {
            [super touchesEnded:[NSSet setWithObject:t] withEvent:event];
            key = NULL;
        }
    }
}

不幸的是,这个实现存在问题。第一次(用一根手指拖动)如果我用第二个手指触摸,系统会立即注册。然而,第二次用第二根手指触摸(同时仍然继续用第一根手指拖动),第二根手指触摸不会记录,直到第一根手指被抬起。来自第二根手指的事件已备份......

有些奇怪的是,有时,父母会被第二根手指而不是第一根手指的触摸数据调用。

1 个答案:

答案 0 :(得分:0)

事实证明我的代码工作正常,但问题在于我将属于Core Plot框架的对象子类化。这个框架对他们的对象做了奇怪的事情,因此接触的顺序错误。

我创建了一个空项目来接收触摸,一切都很棒。