TouchesBegan在显示屏的左侧延迟

And*_*o13 7 iphone objective-c touchesbegan ios sprite-kit

在启用了3D触控功能的iPhone上,有一个功能是长时间按下屏幕的左侧并打开足够的力可让您更改哪个应用程序处于活动状态.因此,当在屏幕的左侧发生非移动触摸时,触摸事件被延迟一秒或两秒,直到iPhone验证用户没有尝试切换任务并且正在与应用交互.

在使用SpriteKit开发游戏时这是一个主要问题,因为每当用户在屏幕的左边缘点击/按住手指时这些触摸会延迟一秒.我能够通过UILongPressGestureRecognizer在游戏的主场景中注册一个来解决这个问题,从而禁用TouchesBegan和实现自定义触摸功能(用作手势识别器的选择器):

-(void)handleLongPressGesture:(UITapGestureRecognizer *)gesture {

    CGPoint location = [gesture locationInView:self.view];

    if (gesture.state == UIGestureRecognizerStateBegan)
    {
        //
    }
    else if (gesture.state == UIGestureRecognizerStateChanged)
    {
        //
    }
    else if (gesture.state == UIGestureRecognizerStateEnded)
    {
        //
    }
    else if (gesture.state == UIGestureRecognizerStateCancelled)
    {
        //

    }
}

-(void)didMoveToView:(SKView *)view {
    /* Setup your scene here */

    UILongPressGestureRecognizer *longPressGestureRecognizer = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(handleLongPressGesture:)];

    longPressGestureRecognizer.delaysTouchesBegan = false;
    longPressGestureRecognizer.minimumPressDuration = 0;
    [view addGestureRecognizer:longPressGestureRecognizer];

    // continue
}
Run Code Online (Sandbox Code Playgroud)

这个问题是我必须为我希望用户输入的每次触摸(包括同步触摸)实现手势识别器.这干扰任何touchesBegan方法作为子类SKSpriteNode,SKScene等,杀死了很多功能.

有没有办法禁用这个延迟?注册gestureRecognizer时,我能够将delaysTouchesBegan属性设置为false.我能以某种方式为我的SKScene做同样的事吗?

要查看此问题,您可以运行默认的SpriteKit项目,然后点击屏幕左侧附近的(保持一两秒钟).您将看到触摸屏幕和SKShapeNodes渲染时间之间存在延迟(而不是触摸屏幕上的任何其他位置).

*编辑1* 对于那些试图找到解决此问题的方法,您可以保留手势识别器但将其设置cancelsTouchesInView为false.使用手势识别器完成您需要做的所有事情,直到TouchesBegan启动(touchesBegan在手势识别器识别触摸后将接收相同的触摸事件一秒钟).一旦touchesBegan启动,您可以禁用手势识别器中发生的所有事情.这对我来说似乎是一个草率的修复,但它现在有效.

仍在努力寻找一种或多或少的正式解决方案.

use*_*695 0

我作为用户就经历过这种情况,这真的很烦人。唯一对我有用的是禁用 3D Touch。否则触摸屏的左侧几乎没有用处。