复杂的iOS多点触摸交互-有什么建议吗?

复杂的iOS多点触摸交互-有什么建议吗?,ios,Ios,我已经对一个UIView进行了子类化,它已经可以处理单触和拖动。我希望增强此视图的交互,以便在拖动时,如果用户用第二个手指触摸(视图中的任何其他位置),系统将打印一条消息。我尝试了一下代码: 在我的头文件中,我声明: NSString *key; // This unique key identifies the first touch 我的.m文件我有: - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {

我已经对一个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;
        }
    }
}
不幸的是,这种实现存在一些问题。第一次(用一个手指拖动)如果我用第二个手指触摸,系统将立即注册它。但是,当我第二次用第二个手指触摸时(仍继续用第一个手指拖动),直到抬起第一个手指,第二个手指触摸才会记录。来自秒针的事件已备份


同样奇怪的是,有时会用第二个手指而不是第一个手指的触摸数据调用父对象。

结果证明我的代码是有效的,但问题是我将属于核心绘图框架的对象子类化了。这个框架对他们的对象做了一些奇怪的事情,因此触摸的顺序是错误的


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

为什么不使用?我尝试过使用两个手指,一次轻触手势识别器,但如果我用手指拖动,这将不起作用。识别器将吃掉所有事件,然后再将其传递到touchesBegin方法。要进行拖动,您需要使用UIPangestureRecognizer在这种情况下使用手势识别器的优势是什么?我可能能够识别单指平移手势(相当于拖动),但我还需要在用户平移时同时识别轻触。这不需要额外的低水平控制吗?