`touchesBegan:withEvent:`在屏幕左边延迟

时间:2016-10-02 02:16:50

标签: ios iphone ios10 touchesbegan 3dtouch

我遇到一个问题,当您触摸屏幕的左边缘时,UIViewUIViewControllerUIGestureRecognizers的第一次电话会被延迟。这似乎是iOS 10的一个新问题,并且只发生在具有3D Touch(iPhone 6s和更新版本)的设备上。事实上,如果您在General->辅助功能中禁用3D Touch,问题就会消失。

但是,使用UIGestureRecognizer时似乎不会发生此问题。我目前的解决方法是创建一个覆盖touches*方法的#!/usr/bin/env python2.7 子类,并将它们转发到我的旧实现。

这只是一个错误还是有办法摆脱延迟?

5 个答案:

答案 0 :(得分:6)

尝试将此添加到viewdidappear方法。这可能会解决问题。它也发生在我身上,但我从堆栈溢出中得到了这个代码来解决我的问题。希望它也能帮助你

let window = view.window!
let gr0 = window.gestureRecognizers![0] as UIGestureRecognizer
let gr1 = window.gestureRecognizers![1] as UIGestureRecognizer
gr0.delaysTouchesBegan = false
gr1.delaysTouchesBegan = false

答案 1 :(得分:1)

Purteeek解决方案似乎也适用于我的情况。这是SpriteKit的一个Objective-C实现:

- (void)didMoveToView:(SKView *)view {

    UIGestureRecognizer* gr0 = view.window.gestureRecognizers[0];
    UIGestureRecognizer* gr1 = view.window.gestureRecognizers[1];

    gr0.delaysTouchesBegan = false;
    gr1.delaysTouchesBegan = false;

}

这不会影响其他手势识别器,系统3D Touch仍然可以正常工作。我想知道为什么这不是默认行为。

答案 2 :(得分:0)

像danialias一样,我正在玩游戏。我发现的解决方案(目前正在使用支持3D Touch的iPhone上进行测试,到目前为止这是一个真正的问题......)适用于这两款游戏/应用:

似乎UITapGestureRecognizer并没有受到这种延迟的影响,所以只需在视图中添加一个,然后用它来处理点击。

在我的游戏中,我存储触摸并在每次间隔更新时处理它们,所以我覆盖了

-(BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch {
    [self.touches addObject:touch];
    return NO;
}

然后我存储了UITouch实例并返回NO。

async

答案 3 :(得分:0)

在iOS 13.2中为

。看来这是不可能的:

[Warning] Trying to set delaysTouchesBegan to NO on a system gate gesture
recognizer - this is unsupported and will have undesired side effects

似乎唯一的解决方案是在“设置”中禁用3D触摸。

答案 4 :(得分:0)

这对我有用

$Date