落格输入法 X 是如何处理屏幕边缘延迟问题的

栏目: IOS · 发布时间: 7年前

内容简介:最近更新:22nd 九月, 2018在开发落格输入法的过程中,我就一直被一个问题所困扰,那就是当用户点击在屏幕左侧边缘时,这在键盘上就很明显了,按键音、按键视觉提示和震动提示都因此而延后,在连续输入的时候,一旦遇到屏幕左侧边缘的

最近更新:22nd 九月, 2018

问题

在开发落格输入法的过程中,我就一直被一个问题所困扰,那就是当用户点击在屏幕左侧边缘时, UIButton touchDown event 几乎变成了 touchUpInside 。也就是说,这两个同时发生,而当你仅按下的时候, touchDown 不再被调用要等到你抬起手指的那一瞬间,才触发 touchDown

这在键盘上就很明显了,按键音、按键视觉提示和震动提示都因此而延后,在连续输入的时候,一旦遇到屏幕左侧边缘的 Q 键,则明显要感觉键入流程卡顿一下。

这个问题其实是由于 3D Touch 切换多任务以及从屏幕边缘向右滑动返回的手势导致的。由于这两者是 iOS 系统全局的,所以我们很难绕过这一上游 bug。

甚至在 iPhone X 系列的全面屏里,键盘的这个问题不但没有得到改进,反而变成了屏幕两边都延迟的情况。

App 里的解决办法

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

override var preferredScreenEdgesDeferringSystemGestures: UIRectEdge {<br />
        return [.top,.<em>left</em>,.<em>right</em>,.<em>bottom</em>]<br />
    }

键盘里的配置方案

上文中提出的办法,在键盘扩展中是无法生效的——因为 并没有权限 。为此,我做了一个 UIButton 的子类,并在其中使用 func point ( inside point : CGPoint , with event : UIEvent ? ) -> Bool 这个方法来判断用户点击,它的优势是不论用户点击到哪里,都会第一时间被触发。

if super.point(inside: point, with: event), event?.type == UIEvent.EventType.touches {
            sendActions(for: UIControl.Event.touchDown)
        }

当判定点击的是当前 Button 时,我们手动触发 touchDown 调用。

这样不论用户点击到哪里,键盘都可以在第一时间正确响应了——但是,新的问题随之而来,由于点击本身也会产生 touchDown ,所有的正常点击就都变成了两份(或多份,连续的 touchDown 已经让 event 变成了 touchDownRepeat),你需要做额外的点击过滤,由于点击效果的传递实现五花八门,这里就不做深入展开了。


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Data Structures and Algorithms in Python

Data Structures and Algorithms in Python

Michael T. Goodrich、Roberto Tamassia、Michael H. Goldwasser / John Wiley & Sons / 2013-7-5 / GBP 121.23

Based on the authors' market leading data structures books in Java and C++, this book offers a comprehensive, definitive introduction to data structures in Python by authoritative authors. Data Struct......一起来看看 《Data Structures and Algorithms in Python》 这本书的介绍吧!

MD5 加密
MD5 加密

MD5 加密工具

html转js在线工具
html转js在线工具

html转js在线工具

RGB HSV 转换
RGB HSV 转换

RGB HSV 互转工具