在呈现UIView之后触及开始延迟

时间:2014-09-26 16:50:38

标签: ios uiview touchesbegan

我正在尝试加载UIView,然后立即检测该新视图的触摸。目前,覆盖touchesBegan会延迟大约一秒钟。

所以,我加载UIView并立即点击屏幕。调用touchesBegan大约需要一秒钟。从那时起,一切都很顺利。但是,我最初无法承受〜第二次等待。

我已经将UIView中的所有代码都删除了,只是因为任何东西堵塞了主线程,但延迟仍然存在。

如何从新呈现的UIView获得即时反馈?感谢。

- 编辑以下 -

过去几个小时我一直在玩这个游戏。即使在创建自定义UIWindow并覆盖sendEvent时,UITouchPhase也会在显示新视图时停止。要再次开始接收事件,我必须将手指从屏幕上移开并将其放回屏幕上。 (我不想这样做)。

问题似乎在于新视图控制器的segue。当它发生偏移时,触摸阶段结束。如果我只是将子视图添加到当前视图控制器,我会看到所需的功能(即即时响应触摸)。

鉴于我新呈现的视图包含许多逻辑,我想将它全部包含在它自己的视图控制器中,而不是将其添加到演示者视图控制器中。有没有办法让我这样做并使用'addSubview`来呈现它?这应该有希望达到预期的效果。

4 个答案:

答案 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
}