在上一篇研究了动效之后,这段时间一直在琢磨如何做一些更有趣的东西,所以,昨天我开源了一个新的声波库——Waver,拥有非常动人的声波效果,在此要感谢 SCSiriWaveformView 这个项目,Waver 在他的基础上改成了 Block 的使用方式,同时声波采用我最熟悉的 UIBezierPath 和 CAShapeLayer 实现,并做了一些逻辑上的优化,实现了 8 倍的性能提升。
采用 UIBezierPath & CAShapeLayer 的另外一个好处是更方便对初始形态进行调整,像 Siri 那样可以从圆形变成线条。
你也可以下载它的示例视频。
不过对此而言,怎么使用不是最重要的,重要的是怎么实现这样的效果,So,Lets have some fun!
原理
在大概半年多前的时候,iOS 群里曾有过关于如何实现像 Siri 的声波效果的讨论,当时提出的第一个解决方案是 FFT ,网易公开课有斯坦福相关的课程。
傅立叶原理:任何连续测量的时序或信号,都可以表示为不同频率的正弦波信号的无限叠加。
不过解释或者推导再应用这个原理显然不那么有趣,我想从一个纯粹的逻辑角度出发去解决这个事情。
Mac 上有个非常有趣的软件,叫做 Grapher,你可以在里面输入我们玩的公式,也可以直接下载我们的试验文件。