我正在尝试加载UIView
,然后立即检测该新视图的触摸。目前,覆盖touchesBegan
会延迟大约一秒钟。
所以,我加载UIView
并立即点击屏幕。调用touchesBegan
大约需要一秒钟。从那时起,一切都很顺利。但是,我最初无法承受〜第二次等待。
我已经将UIView
中的所有代码都删除了,只是因为任何东西堵塞了主线程,但延迟仍然存在。
如何从新呈现的UIView
获得即时反馈?感谢。
- 编辑以下 -
过去几个小时我一直在玩这个游戏。即使在创建自定义UIWindow
并覆盖sendEvent
时,UITouchPhase
也会在显示新视图时停止。要再次开始接收事件,我必须将手指从屏幕上移开并将其放回屏幕上。 (我不想这样做)。
问题似乎在于新视图控制器的segue。当它发生偏移时,触摸阶段结束。如果我只是将子视图添加到当前视图控制器,我会看到所需的功能(即即时响应触摸)。
鉴于我新呈现的视图包含许多逻辑,我想将它全部包含在它自己的视图控制器中,而不是将其添加到演示者视图控制器中。有没有办法让我这样做并使用'addSubview`来呈现它?这应该有希望达到预期的效果。
答案 0 :(得分:2)
最后,我用它自己的xib创建了一个自定义视图控制器。在我想要的地方,我现在实例化自定义视图控制器并附加它的视图。这消除了触摸延迟。
答案 1 :(得分:1)
您是否禁用了多点触控?当控制器等待查看是否有后续触摸(在所有单个触摸上)时,存在固有的延迟。最初的迟缓可能来自加载多点触控代码并决定如何处理它。
myViewController.view.multipleTouchEnabled=NO;
答案 2 :(得分:0)
关于你的最后一个问题,请查看view controller containment。自iOS 5以来,Apple正式且安全地提供了钩子,将一个视图控制器呈现为另一个视图控制器的子视图。
可悲的是,我对更大的问题没有任何见解。
答案 3 :(得分:0)
我从这里提出的类似问题中找到了一个对我有用的答案:
iOS: Why touchesBegan has some delay in some specific area in UIView
此解决方案未在该线程上选中,因此,我将其复制到此处以使其更易于查找。
override func viewDidAppear(animated: Bool) {
let window = view.window!
let gr0 = window.gestureRecognizers![0] as UIGestureRecognizer
let gr1 = window.gestureRecognizers![1] as UIGestureRecognizer
gr0.delaysTouchesBegan = false
gr1.delaysTouchesBegan = false
}