我遇到一个问题,当您触摸屏幕的左边缘时,UIView
或UIViewController
上UIGestureRecognizers
的第一次电话会被延迟。这似乎是iOS 10的一个新问题,并且只发生在具有3D Touch(iPhone 6s和更新版本)的设备上。事实上,如果您在General->辅助功能中禁用3D Touch,问题就会消失。
但是,使用UIGestureRecognizer
时似乎不会发生此问题。我目前的解决方法是创建一个覆盖touches*
方法的#!/usr/bin/env python2.7
子类,并将它们转发到我的旧实现。
这只是一个错误还是有办法摆脱延迟?
答案 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)
。看来这是不可能的:
[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