iOS画板回放签名效果回放
长时间未写,更新一下。。。
朋友有一个比较有意思的需求,做一个带回放功能的画板,趁着有空尝试下。。。
比如你画了一个房子或者写了一个名字,操作完成之后,点击回放,可以看到你画的一个过程,像下面这样:
屏幕录制Draw.gif
画板的话不用说,比较简单,使用CAShapeLayer不停拼接path即可,回放的话,思路有很多种,就看要实现到哪种程度了。
因为在绘制的过程中我们已经有了点位数组,再次还原path即可,所以路径问题不大,那么关键点在时间控制上,每个point的时间间隔决定着你画笔的快满。当然,从简来说,给个匀速也是未尝不可,简化了逻辑处理量。不过我还是想尝试一下完全还原的效果,那么就不得不处理时间问题。
方案与思路:
1.计时器方案。计时器方案适用于匀速效果,在变速上则难以控制其效果,pass
2.屏幕录制效果。用户想要使用回放功能,要让其他开屏幕录制功能。效果上可行,但是有点过度操作。
3.动画效果配合CADisplaylink。利用动画的效果,我们可以操作出point与time的对应,这样配合屏幕的刷新机制,我们实时获取动画的一个当前路径,来拼接path。
最终选择方案3,理由:无附加操作,理论可行性极高,而做出的结果也是OK的,说明此思路可行。
方案3需要注意的几点:
1.每断开的一笔都是一个path,每个path都是一个独立的CAShapeLayer,以此为最小单元进行控制;
2.由于point的数量会非常庞大,考虑到节省下内存的情况,去除相同的point,保留最后一个point;
3.每个UITouch的对象都携带一个timestamp属性,以此为时间的入口;
4.动画这里,使用的关键帧动画CAKeyframeAnimation,通过给定position和keytimes使其产生动画路径,也可以说是利用动画帮我们做出时间差异的效果;
Git:https://github.com/QiuYunxiang/DrawRecording
8.30补充更新:后续需要加入动画暂停 / 继续回放的效果,还在尝试方案