落格輸入法 X 是如何處理屏幕邊緣延遲問題的

問題

在開發落格輸入法的過程中,我就一直被一個問題所困擾,那就是當用戶點擊在屏幕左側邊緣時, 的UIButton接地 event 幾乎變成了 touchUpInside 。也就是說,這兩個同時發生,而當你僅按下的時候, touchDown 不再被调用要等到你抬起手指的那一瞬间才触发 接地这在键盘上就很明显了,按鍵音、按键视觉提示和震动提示都因此而延后在连续输入的时候一旦遇到屏幕左侧边缘的 Q 鍵,则明显要感觉键入流程卡顿一下这个问题其实是由于 3D Touch 切换多任务以及从屏幕边缘向右滑动返回的手势导致的由于这两者是 iOS 系统全局的所以我们很难绕过这一上游 bug
甚至在 iPhone X 系列的全面屏里键盘的这个问题不但没有得到改进反而变成了屏幕两边都延迟的情况

App 里的解决办法

这个错误由来已久但直到 iOS 11,才勉强算是有了解决办法preferredScreenEdgesDeferringSystemGestures: UIRectEdge的你需要在你的 ViewController 中重写这个变量让你的 app 优先级高于系统手势即可

键盘里的配置方案

上文中提出的办法在键盘扩展中是无法生效的——因为并没有权限。為此,我做了一个 UIButton 的子类并在其中使用 FUNC point(inside point: CGPoint, with 事件: UIEvent?) -> 布爾 这个方法来判断用户点击它的优势是不论用户点击到哪里都会第一时间被触发 当判定点击的是当前 Button 时我们手动触发 touchDown 调用这样不论用户点击到哪里键盘都可以在第一时间正确响应了——但是新的问题随之而来由于点击本身也会产生 touchDown所有的正常点击就都变成了两份(或多份连续的 touchDown 已经让 event 变成了 touchDownRepeat)你需要做额外的点击过滤由于点击效果的传递实现五花八门这里就不做深入展开了

由...出版 R0uter

如非聲明,本人所著文章均為原創手打,轉載請註明本頁面鏈接和我的名字。

加入對話

2 註釋

您的電子郵件地址不會被公開. 必填字段標 *