屏幕底部的UIButton的TouchDown延迟

时间:2018-12-06 15:01:00

标签: ios swift uibutton uikit

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

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

显示键盘,并且屏幕底部向上移动时,完全没有延迟。

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

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

这使我认为延迟与屏幕底部的按钮位置有关。

2 个答案:

答案 0 :(得分: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,然后在用户释放按钮时将其重新设置。

答案 1 :(得分:0)

您是否尝试从故事板上取消选中表格视图/滚动视图的延迟按下