UITouch触摸事件向下被识别为移动

时间:2014-01-29 11:41:36

标签: ios objective-c cocoa-touch uitouch touch-event

我有以下问题:

如果我用一根手指(即中指)点击触摸屏并接近手指上升的那一刻,我用第二根手指(即食指)靠近另一根手指所在的区域轻拍,而不是得到一个下来的事件,我得到了第一根手指的移动 第二根手指的向下位置。重现它有点棘手,但它是可重复的。

我有一个UIView,并且接触我有以下内容:

- (void) touchesBegan: (NSSet *) touches withEvent: (UIEvent *) event
{
  for (UITouch *touch in touches) {
    int index = (int)touch;
    CGPoint position = [touch locationInView:self];
    NSLog(@"DOWN %d x:%f y:%f", index, position.x, position.y);
  }
}

- (void) touchesMoved: (NSSet *) touches withEvent: (UIEvent *) event
{
  for (UITouch *touch in touches) {
    int index = (int)touch;
    CGPoint position = [touch locationInView:self];
    NSLog(@"MOVE %d x:%f y:%f", index, position.x, position.y);
  }
}

- (void) touchesEnded: (NSSet *) touches withEvent: (UIEvent *) event
{
  for (UITouch *touch in touches) {
    int index = (int)touch;
    CGPoint position = [touch locationInView:self];
    NSLog(@"UP   %d %f %f", index, position.x, position.y);
  }
}

当我重现它时,我有以下输出

DOWN 510365696 x:891.500000 y:197.000000
MOVE 510365696 x:774.000000 y:263.000000
MOVE 510365696 x:766.000000 y:268.500000
UP   510365696 764.500000 270.000000

其中上述MOVE是第二个手指的向下位置。你也可以看到第一根手指上的UP应该是pos(891,197)完全丢失...

我知道我可以检测到这些“跳跃”但是没有办法将它们与快速移动的手指区分开来。

我感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

当我尝试使用相同的code时,我观察到的是,即使是手指中最轻微的移动也会被检测到。

当您使用第一根手指轻按并按住它时,如果您使用第二根手指点按,则第二根手指位置不会登录。实际上,记录的是第一根手指点的轻微变化,这被观察为 移动 动作。

记录的 向上 位置也靠近第一根手指触摸点。

第二根手指 down 操作永远不会被检测到。

我认为问题是Multiple Touch选项未启用。 选中您的视图后,在Utilities窗格中,选择Attributes Inspector,然后从勾选 Multiple Touch 复选框

这是一个截图:

enter image description here

启用Multiple Touch时的实际日志将如下所示:

DOWN 475396224 x:229.000000 y:6.500000
DOWN 475411840 x:102.000000 y:50.000000
MOVE 475396224 x:231.500000 y:8.000000
MOVE 475411840 x:104.500000 y:51.500000
UP   475396224 231.500000 8.000000
UP   475411840 104.500000 51.500000

希望这有帮助!