問題
在開發落格輸入法的過程中,我就一直被一個問題所困擾,那就是當用戶點擊在屏幕左側邊緣時, 的UIButton 的 接地 event 幾乎變成了 touchUpInside 。也就是說,這兩個同時發生,而當你僅按下的時候, touchDown 不再被調用要等到你抬起手指的那一瞬間,才觸發 接地 。 這在鍵盤上就很明顯了,按鍵音、按鍵視覺提示和震動提示都因此而延後,在連續輸入的時候,一旦遇到屏幕左側邊緣的 Q 鍵,則明顯要感覺鍵入流程卡頓一下。 這個問題其實是由於 3D Touch 切換多任務以及從屏幕邊緣向右滑動返回的手勢導致的。由於這兩者是 iOS 系統全局的,所以我們很難繞過這一上游 bug。甚至在 iPhone X 系列的全面屏裡,鍵盤的這個問題不但沒有得到改進,反而變成了屏幕兩邊都延遲的情況。
App 裡的解決辦法
這個錯誤由來已久,但直到 iOS 11,才勉強算是有了解決辦法: preferredScreenEdgesDeferringSystemGestures: UIRectEdge的你需要在你的 ViewController 中重寫這個變量,讓你的 app 優先級高於系統手勢即可。
1 2 3 |
override var preferredScreenEdgesDeferringSystemGestures: UIRectEdge { return [.top,.left,.right,.bottom] } |
鍵盤裡的配置方案
上文中提出的辦法,在鍵盤擴展中是無法生效的——因為並沒有權限。為此,我做了一個 UIButton 的子類,並在其中使用 FUNC 點(內 點: CGPoint, 同 事件: 的UIEvent?) -> 布爾 這個方法來判斷用戶點擊,它的優勢是不論用戶點擊到哪裡,都會第一時間被觸發。
1 2 3 |
if super.point(inside: point, with: event), event?.type == UIEvent.EventType.touches { sendActions(for: UIControl.Event.touchDown) } |
本文由 落格博客 原創撰寫:落格博客 » 落格輸入法 X 是如何處理屏幕邊緣延遲問題的
轉載請保留出處和原文鏈接:https://www.logcg.com/archives/3094.html
您好,能提供這個UIButton子類的部份代碼嗎?
很遺憾這部分代碼我已經沒了,因為我最終換了另外一種方式來實現點擊效果……因為這個方案對我的按鍵處理流程來說……有一些衝突的地方。