ios - 显示屏左侧的 TouchesBegan 延迟

标签 ios objective-c iphone sprite-kit touchesbegan

在启用了 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
}

问题是我必须为我希望用户输入的每个触摸(包括同时触摸)实现一个手势识别器。这会干扰作为 SKSpriteNodeSKScene 等子类的任何 touchesBegan 方法,并会破坏很多功能。

有什么方法可以禁用此延迟吗?注册 gestureRecognizer 时,我能够将 delaysTouchesBegan 属性设置为 false。我能以某种方式为我的 SKScene 做同样的事情吗?

要实际查看此问题,您可以运行默认的 SpriteKit 项目,然后点击(按住一两秒钟)屏幕左侧附近。您会发现在触摸屏幕和呈现 SKShapeNodes 之间存在延迟(与触摸屏幕上的其他任何地方相反)。

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

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

最佳答案

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

关于ios - 显示屏左侧的 TouchesBegan 延迟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39998489/

相关文章:

ios - Firebase Cloud Messaging 通知未显示在 iOS 设备上(前台和后台)

ios - UIView animateWithDuration 如何通过触摸事件取消(不与 MapView 交互)

objective-c - 如何在 iOS/OS X 中将 HTML 转换为 Markdown?有什么方法可以在应用程序中使用 pandoc 吗?

iphone - setApplicationIconBadgeNumber 多次调用时不会更新徽章

php - 将数据发送到在线 Php 脚本

ios - Swift:声音输出和麦克风输入 |使用 AudioKit |

iphone - 有没有办法在sqlite表中顺序插入数据?

iPhone:如何使 UI 导航 Controller 彼此内部?

ios - 宽度约束更新后 View 未重绘

ios - iOS 中的总屏幕解锁时间计算