LOTTIE-跨平台的动画解决方案

1.Lottie是什么

Lottie是Airbnb开源的一个支持iOS,Android,React Native和Web的动画库,我们可以使用设计师导出来的json文件快速实现动画效果.

2.如果我们想要实现下列动画


我们使用现有技术会遇到的问题:

1.每一帧都是一张图片,文件过于庞大。

2.不同分辨率设备的适配存在不便。

3.Gif格式的色深问题无法解决。

4.想要在线获取动画成本比较高。

替代方案:

现在可以使用开源的Lottie动画库来实现相应效果。

UI需要做的是,通过AE生成动画,然后使用bodymovin插件导出json和sourse(非必须)文件即可。

对比gif和json的大小及清晰度区别:

上面的方案:原始518k,压缩后514k

下面的方案:原始29k,压缩后5k

3.使用方法

1.直接添加一个动画视图

2.switch类控件

3.转场动画

支持协议即可,在回调中使用动画

4.代码结构

LOTAnimationView

继承自LOTView,也就是UIView,主要是封装了一些动画的操作

LOTComposition(动画数据)

用于解析动画的json文件,获取整个动画数据

LOTLayerGroup(Layer动画组)

解析json文件中的"layers" 层的数据返回所有LOTLayer 集合

LOTLayer

解析获得json文件中的每一个layer数据具体详情

更多结构示意

5.注意事项

• 如果使用了素材, 那么素材图片的每个像素都会直接加载进内存, 并且是不能释放掉的, 所以, 如果是一些小图片, 加载进去也还好, 但是如果是整页的启动动画, 不拆分一下素材, 可能一个启动页所需要的内存就是50MB以上. 如果不使用素材, 而是在AE中直接绘制则没有这个问题.

• 如果使用的PS中绘制的素材, 在AE中做动画, 可能在动画导出的素材中出现黑边, 解决办法是将素材拖入PS去掉黑边, 同名替换.

• 拆分素材的办法是将一个动画中静态的部分直接切出来加载, 动的部分单独做动画

• 如果一个项目中使用了多个Lottie的动画, 需要注意Json文件中的路径及素材名称不能重复, 否则会错乱

• Lottie先天就支持播放式动画, 对于交互式动画有个animationProgress的属性

4.其他

图片的另一种形式-矢量图

导入工程的方式:

1.简单使用

与 PNG 格式的图片一样,在 Xcode 中把 PDF 格式的矢量图拖进 *.xcassets (默认是 Assets.xcassets) 文件夹中,然后用不带后缀(.pdf)的文件名生成 UIImage

imageView.image = [UIImage imageNamed:@"Vector"];

注意,如果以上代码用 "Vector.pdf",无法得到 UIImage。

这样做的话,Xcode 会在编译时根据 PDF 图的大小生成 @1x、@2x、@3x 的 PNG 图片,与使用 PNG 图片的显示效果相同。如果把图片放大到超过 PNG 图片的大小,则会显示模糊的图片。没有发挥矢量图可以任意调整大小的优点。

2.改变矢量图大小

如果需要改变矢量图大小并且保持清晰度,那就要解析 PDF 源文件,把矢量图绘制成所需大小的位图(Bitmap)。YHPDFImageLoader 库就实现了这个功能,并且可以选择拉伸图片时是否保持原图宽高比,还添加了内存和磁盘缓存。这里的 PDF 文件放在工程目录中,与 *.m、*.h 文件一样,可以放在bundle,不能放在 *.xcassets 里。

矢量图加入工程中的优点

1.APP 瘦身

对比一下某个图标的一套常规的 PNG 图片和 PDF 类型的图片的大小:

网络资源

PDF 文件大小为 7KB

PNG 三个文件合计大小为 85KB

这里的PNG图片还可以压缩,压缩后可能会有较大幅度变更.

2.便于维护

方便后续的不同scale变化,不必要使用4x,5x等尺寸

3.可以无限放大

在文件大小固定的情况下可以无限放大,更加节省空间

其他工具 - PaintCode

代码直接将SVG文件转换成iOS代码,可以放到drawRect中实现纯代码绘制相应UI样式

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 195,980评论 5 462
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 82,422评论 2 373
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 143,130评论 0 325
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,553评论 1 267
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,408评论 5 358
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,326评论 1 273
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,720评论 3 386
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,373评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,678评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,722评论 2 312
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,486评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,335评论 3 313
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,738评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,009评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,283评论 1 251
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,692评论 2 342
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,893评论 2 335

推荐阅读更多精彩内容

  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 11,952评论 4 60
  • 关于URLConnection的getContentLength函数返还-1,网上几乎所有的说法,都是说因为启动了...
    pinkong阅读 1,954评论 1 2
  • 陶溪川艺术区高耸的烟囱、玻璃隔断内被完好保留的旧工厂设施、整齐划一红砖砌就的极简工业风格,仿佛回到北京798进修的...
    ciciLeee阅读 251评论 0 0
  • 夜空,是梦的画板 勾勒出难能一见的 飞鱼和大海 飞机,是爱的惊喜 思念跨越光年传递 牛郎和织女
    阿金的酒与诗阅读 79评论 0 2
  • 文/叶老巫 || 每天絮絮叨叨,坚持日更, 今天是第 121 篇 1、 百度一下,干货文一大把一大把的,实在太多了...
    叶两步阅读 838评论 5 27