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

问题描述 投票:2回答:4

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

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

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

我怎样才能立即获得新呈现的UIView的触摸反馈?谢谢。

- 编辑以下 -

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

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

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

ios uiview touchesbegan
4个回答
2
投票

最后,我用它自己的xib创建了一个自定义视图控制器。在我想要的地方,我现在实例化自定义视图控制器并附加它的视图。这消除了触摸延迟。


1
投票

您是否禁用了多点触控?当控制器等待查看是否有跟进触摸(在所有单个触摸上)时,存在固有的延迟。最初的迟缓可能来自加载多点触控代码并决定如何处理它。

myViewController.view.multipleTouchEnabled=NO;

0
投票

至于你的最后一个问题,请看看view controller containment。从iOS 5开始,Apple正式且安全地提供了钩子,将一个视图控制器作为另一个视图控制器的子视图。

可悲的是,我对更大的问题没有任何见解。


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
}
© www.soinside.com 2019 - 2024. All rights reserved.