【问题标题】:touchesBegan delay after presenting UIView呈现 UIView 后 touchesBegan 延迟
【发布时间】:2014-09-26 16:50:37
【问题描述】:

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

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

我已将UIView 中的所有代码剥离为仅是准系统,以防有任何东西阻塞了主线程,但延迟仍然存在。

如何从新提交的UIView 获得即时反馈?谢谢。

-- 在下面编辑--

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

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

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

【问题讨论】:

    标签: ios uiview touchesbegan


    【解决方案1】:

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

    【讨论】:

    【解决方案2】:

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

    myViewController.view.multipleTouchEnabled=NO;
    

    【讨论】:

    • 尝试禁用多点触控,不幸的是并没有停止延迟。我还实现了自定义UIWindow 并覆盖sendEvent。奇怪的是,这也会在延迟期间停止接收/发送事件。
    【解决方案3】:

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

    遗憾的是,我对更大的问题一无所知。

    【讨论】:

      【解决方案4】:

      我从此处提出的类似问题中找到了适合我的答案:

      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
      }
      

      【讨论】:

        猜你喜欢
        • 2014-01-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多