Lottie是一个强大的第三方动画支持库,通过下发的json文档读取绘制动画。近期项目中有用到,遇到一个大坑,网上和官方论坛也搜不到,记录一下,也希望能帮到一些人。
1. 暂时不支持渐变描边
设计人员给了我一个json动画文件,然后这个文件在他们web官网是显示的,在他们LottieFiles的iOS APP中扫码也是显示的,就是在我们app里不显示!
原因 :因为web版本支持渐变描边!因为安卓版本也支持渐变描边!OC版本不支持!
他们自己的APP是Swift代码写的,Swift版本的Lottie是支持渐变描边的,而截止目前的iOS版本中,2.5.3版本,Objective-C版本不支持渐变描边,这个在json文件中表现为ty:gs,这个ty就是type的缩写,这个gs就是gradient stroke的缩写,渐变描边的意思,如果是动画是渐变填充(gf)的就没问题。
这里我解释下,shape group是一个图形组,每一组都是一种绘制,分发给不同的子类处理,当发现ty是gs的时候,直接报错,如下图源码:
所以如果你的json动画无法显示,在确定调用代码没问题的情况下,优先看看json文件中有没有这个gs,或者去你Lottie的源码里看看有没有支持gs模式。
注意,如果你的项目比较小,换库代价小,就换swift版本吧。
二、Lottie动画库的swift官方demo报错问题
我下载了他们的Swift版本,GitHub上的源码,下载到本地有问题,编译报错,如下
大坑啊,他们自己添加的一个扩展方法,无法找到并调用!
通过阅读Swift源码可以知道,这里这个函数就是通过json名称和函数找到json,然后构造成animation对象并返回,所以我修改过后的代码如下:
当然,同期尽量要修改的,还有调用处,
嗯,这就很OC,也很简洁了。
将自己的json拖入工程Supporting Files中,编译运行以后,一切OK!
注:找到这个类的这一行,你会发现为什么Swift版本为什么能支持渐变描边