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

問題

在開發落格輸入法的過程中,我就一直被一個問題所困擾,那就是當用戶點擊在屏幕左側邊緣時, 的UIButton接地 event 幾乎變成了 touchUpInside 。也就是說,這兩個同時發生,而當你僅按下的時候, touchDown 不再被調用要等到你抬起手指的那一瞬間,才觸發 接地 。 這在鍵盤上就很明顯了,按鍵音、按鍵視覺提示和震動提示都因此而延後,在連續輸入的時候,一旦遇到屏幕左側邊緣的 Q 鍵,則明顯要感覺鍵入流程卡頓一下。 這個問題其實是由於 3D Touch 切換多任務以及從屏幕邊緣向右滑動返回的手勢導致的。由於這兩者是 iOS 系統全局的,所以我們很難繞過這一上游 bug。
甚至在 iPhone X 系列的全面屏裡,鍵盤的這個問題不但沒有得到改進,反而變成了屏幕兩邊都延遲的情況。

App 裡的解決辦法

這個錯誤由來已久,但直到 iOS 11,才勉強算是有了解決辦法: preferredScreenEdgesDeferringSystemGestures: UIRectEdge的你需要在你的 ViewController 中重寫這個變量,讓你的 app 優先級高於系統手勢即可。

鍵盤裡的配置方案

上文中提出的辦法,在鍵盤擴展中是無法生效的——因為並沒有權限。為此,我做了一個 UIButton 的子類,並在其中使用 FUNC (: CGPoint, 事件: 的UIEvent?) -> 布爾 這個方法來判斷用戶點擊,它的優勢是不論用戶點擊到哪裡,都會第一時間被觸發。 當判定點擊的是當前 Button 時,我們手動觸發 touchDown 調用。 這樣不論用戶點擊到哪裡,鍵盤都可以在第一時間正確響應了——但是,新的問題隨之而來,由於點擊本身也會產生 touchDown ,所有的正常點擊就都變成了兩份(或多份,連續的 touchDown 已經讓 event 變成了 touchDownRepeat),你需要做額外的點擊過濾,由於點擊效果的傳遞實現五花八門,這裡就不做深入展開了。

由...出版 R0uter

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

加入對話

3 註釋

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