ios – 为什么UIViewController touchsBegan,touchesMoved&touchesEnded只有当两个触摸中的第一个开始,移动或结束时才被调用?

前端之家收集整理的这篇文章主要介绍了ios – 为什么UIViewController touchsBegan,touchesMoved&touchesEnded只有当两个触摸中的第一个开始,移动或结束时才被调用?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我通过UIViewController的touchesBegan / Moved / Ended方法处理一个以上的触控问题.我也在cocos2d应用程序中看到相同的行为(使用ccTouchesBegan / Moved / Ended),所以我认为这个问题可以应用于iOS中的所有触摸处理.我把下面使用的代码,其次是我看到的结果.

所有方法都在UIViewController子类上实现.

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
    NSLog(@"Touches Began");
    [self logTouchesFor: event];

    [super touchesEnded: touches withEvent: event];
}

- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
{
    NSLog(@"Touches Moved");
    [self logTouchesFor: event];

    [super touchesEnded: touches withEvent: event];
}

- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
{
    NSLog(@"Touches Ended");
    [self logTouchesFor: event];

    [super touchesEnded: touches withEvent: event];
}

-(void)logTouchesFor:(UIEvent *)event
{
    int count = 1;

    for (UITouch *touch in event.allTouches)
    {
        CGPoint location = [touch locationInView: self.view];

        NSLog(@"%d: (%.0f,%.0f)",count,location.x,location.y);
        count++;
    }
}

现在有趣的结果…

单触摸按预期工作

假设我用拇指触摸屏幕.我在输出窗口中看到touchesBegan已经被调用了.我移动我的拇指,并触摸已被调用.然后我把我的拇指从屏幕上拉出来,然后触摸已被调用.所有这一切都是如预期的那样,我将它作为一个控制案例包含在这个问题中 – 只要清楚我的视图控制器正在接收触摸事件,并且我没有错过任何地方的vc.view.userInteractionEnabled = YES.

第二次触摸不会触发触发,触摸已触发或触摸已被调用

这是最有趣的一个.假设我用拇指触摸屏幕(touchesBegan被调用),并将其保持在屏幕上.然后我用食指触摸屏幕上的其他地方,同时把拇指放在同一个地方. TouchesBegan不叫.然后让我说,我把食指放在绝对静止的位置(这可能是棘手的,但这是可能的).接触不被调用.然后,我把食指从屏幕上拉出来. TouchesEnded不被调用.最后,我移动我的拇指和触摸被调用.然后我把我的拇指从屏幕上拉出来,并且触摸已被调用.

只是为了清楚:我在viewDidLoad方法中设置self.view.multipleTouchEnabled = YES.

有关第二触摸的信息可用,提供第一触摸移动

这一次我做了非常类似于上面的例子.我用拇指触摸屏幕,然后用食指,同时保持我的拇指静止.当我的拇指击中屏幕,而不是我的食指时,TouchesBegan被调用.现在我移动我的拇指,触摸被调用.不仅如此,但事件中有两个触动.allTouches数组(是的,第二个触摸是我期望的地方).这意味着系统意识到我已经触摸屏幕第二次,但我没有通过我的视图控制器上的触摸处理方法通知.

如何通知第二次触摸的变化?

我真的希望能够响应第二次触摸的位置或状态的变化,而不是当第一次触摸也发生变化时.很多时候这不会是一个问题,因为很难改变一触而不影响对方,但我至少有一种情况可能是一个问题.我错过了什么吗?有没有人注意到这种行为或有问题吗?

如果是相关的,我使用的是运行iOS 5.1的iPhone 3GS.

解决方法

好的,我开始努力重建我的项目,一次添加一个文件,我想我已经有了…

有一个视图的子视图有userInteractionEnabled == YES.一旦我设置为NO,我的视图控制器开始触摸每个触摸的按钮/移动/结束呼叫.大概,第二个触摸是被子视图声称,而不是让我的观点控制器,但我不知道为什么这只会发生在第二次触摸,而不是第一次.

我还没有想到cocos2d项目还在发生什么,但是推测这是一个不同的问题,因为没有子视图或节点可以做同样的事情.

猜你在找的iOS相关文章