【问题标题】:TouchDown delayed for UIButton at the bottom of the screen屏幕底部 UIButton 的 TouchDown 延迟
【发布时间】:2019-05-08 07:32:52
【问题描述】:

我在聊天屏幕底部有一个UIButton。我使用TouchDown 来检测用户开始按住按钮并开始录音(标准信使应用程序功能)。

问题是当按钮在屏幕底部时,从我开始按住按钮到TouchDown触发的那一刻有1s的延迟。

当键盘显示,底部向上移动屏幕时,完全没有滞后。

我发现了一个类似的问题,iOS - Delayed "Touch Down" event for UIButton in UITableViewCell 但按钮不在表格视图或滚动视图中

覆盖按钮的touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) 方法并仅打印事件表明它也具有相同的延迟。

这让我觉得延迟与屏幕底部的按钮位置有关。

【问题讨论】:

    标签: ios swift uibutton uikit


    【解决方案1】:

    事实证明,https://stackoverflow.com/a/47255802/581164 暗示,如果用户实际上是在执行系统手势(如从屏幕底部滑动)而不是点击按钮,则延迟是由于 iOS 等待造成的。

    如果我在根视图控制器上覆盖var preferredScreenEdgesDeferringSystemGestures: UIRectEdge 并将其设置为[.bottom, .right],则没有延迟。我不知道为什么[.bottom]不够用,我猜还有一些iOS手势可以从屏幕右边缘滑动,并且按钮位于右下角。

    总是只设置[.bottom, .right] 有一些负面影响,用户必须滑动 2 次才能执行 iOS 从底部滑动的手势。

    关键似乎是仅在用户要按下录制按钮时设置它,例如在func point(inside point: CGPoint, with event: UIEvent?) -> Bool 中,然后在用户释放按钮时将其设置回来。

    【讨论】:

      【解决方案2】:

      您是否尝试从情节提要中取消选中表格视图/滚动视图的Delay Touch Down

      【讨论】:

      • 如问题所述,该按钮不在任何表格视图或滚动视图中
      • 按钮的超级视图是什么?
      • VC 的根视图
      • 您是否尝试过使用 touchesBegan/Moved/Ended/Canceled 方法?您可以检查目标视图是否为录制按钮。
      • 是的,按钮的touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) 具有相同的行为
      猜你喜欢
      • 2023-03-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-27
      • 2013-10-05
      • 1970-01-01
      • 2011-12-05
      相关资源
      最近更新 更多