我在聊天屏幕底部有一个UIButton
。我使用TouchDown
检测到用户开始按住按钮并开始录音(标准Messenger应用功能)。
问题在于,当按钮位于屏幕底部时,从我开始按住按钮的那一刻到TouchDown
触发的那一刻之间会有1 s的延迟。
显示键盘,并且屏幕底部向上移动时,完全没有延迟。
我发现了类似的问题,iOS - Delayed "Touch Down" event for UIButton in UITableViewCell,但是按钮不在表格视图或滚动视图中
覆盖按钮的touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?)
方法并仅打印事件表明它也具有相同的滞后时间。
这使我认为延迟与屏幕底部的按钮位置有关。
答案 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)
您是否尝试从故事板上取消选中表格视图/滚动视图的延迟按下?