TouchesBegan在显示屏的左侧延迟

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

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

 -(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 } 

这个问题是我必须为我期望用户输入的每次触摸(包括同步触摸)实现手势识别器。 这会干扰任何touchesBegan方法作为SKSpriteNodeSKScene等的子类,并杀死许多function。

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

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

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

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

我作为一个用户体验过它,这真的很烦人。 唯一对我有用的是禁用3D触控。 否则触摸屏的左侧几乎没用。