去落格博客阅读完整排版的落格输入法是如何实现按键音的
众所周知,落格输入法不需要获取“完全访问权限”,所以根据苹果的权限,自然就无法播放按键音了。
不过,最近的落格输入法更新中加入了这一功能——在后续的版本中甚至可以加入按键震动了。然而我还是无需获取“完全访问权限”。
那么,我是怎么做到的呢?
iOS 里的声音和震动
其实是同一回事。在 iOS 里,震动其实也是声音,也就是说,首先,只要能播放声音,就可以震动,因为在 iOS 的 api 里,震动也是声音——即声音的一种。
iOS 中播放按键音其实也是播放声音,那么我们可以有这些方法达到目的:
UIDevice.currentDevice().playInputClick()
不过如你所见,它们都是需要完全访问权限才能播放的——但是!
1、使用 AudioToolbox 来播放系统声音其实是不需要权限的!
所以,我们要做的就是找到系统键盘按下的声音代码即可。
由于我们直接去播放声音代码,不同版本声音代码不同,所以这也是为什么官方的播放键盘音用的是一个方法,
UIDevice.currentDevice().playInputClick(),显然,如果你使用的系统版本过低,那么是无法听到键盘音的,我也不知道是因为需要权限,还是根本就没有这个声音代码。
总之,这里我给出所有我找到的声音代码,如果你的键盘也需要,就可以尝试一下。
首先,导入 AudioToolbox 框架
import AudioToolbox,然后,在你需要播放键盘音的地方,比如响应按键事件的地方,调用
AudioServicesPlaySystemSound(1123)即可。
值得一提的是:为了避免堵住主线程,你可能需要在子线程里去播放它——这样又可能导致某些情况下按键音跟不上节奏。
接下来我给出我找到的所有声音(震动)代码,都是基于 iOS 10 的,所以旧版本不一定好用。——但至少好处是不需要“完全访问”权限了对吧?
7系列有更高级的微震动,这个由于我没有对应的设备所以无法测试其接口是否能用,这个只能日后有空再来测试了。
如你所见,只要把声音代码改成震动代码,就可以在6s机器上实现按键震动了,实测打字慢一点的话用 peek 的效果也还挺不错的——费电不费电就不得而知了。
我目前在落格上仅仅在长按、上下点划上用了震动。
目前遇到的问题比如不能像系统键盘那样按下按钮就响——这个是逻辑处理问题,后续可以优化流程。
不能像系统键盘那样快速输入时取消前面的播放,这就导致你连续快速按两次按钮的话,可能只播放一次按键音;震动同理。
后续有空了再研究,就这么多。
落格输入法是如何实现按键音的,首发于落格博客。