Airbnb 发布的 Lottie 是一个面向 iOS、Android 和 React Native 的开源动画库。可以直接利用 AE 导出的 JSON 动画文件,将其解析为原生代码,并跨平台运行在设备上。一个 JSON 文件可以同时复用于 iOS 和 Android ,免去了动画重复开发实现,并且还原度都比较高。

示例动画.gif
示例动画.gif

为什么我们会选择lottie动画

1、从代码上看,Android 端的实现是基于 Drawable、iOS 端是基于 Layer —— 最终都是对 canvas 的操作,中间除去解析 json 外,基本无耗费性能的行为。

2、从存储上,动画由 json 文件描述,占用空间不多,基本可以取代用 GIF 做动画。

3、因为动画由 json 文件描述,所以它的第三个优点是动画的更新及其方便。

4、AE导出Json文件,Lotti 解析Json文件后调Core Animation的API绘制渲染。复杂的帧动画如此实现还原度更好,开发成本更低。

5、跨平台: 支持iOS、Android、React Native。

6、Lotti对于从AE导出的Json文件,用Core Animation做矢量动画, 性能较佳。Lotti 对解析后的数据模型有内存缓存。

7、灵活高效的API: 控制动画进度、播放、暂停。

8、Lottie 的 API 中集成了许多很棒的功能:它支持通过网络加载 JSON 文件,这对 A/B (对照试验)测试方案非常有用;有可选的缓存机制,能支持调用缓存中的动画;动画的速度、相关联的手势都可以通过简单的参数来控制;甚至 iOS 中还支持在 Runtime 中添加额外的原生 UI ,从而实现复杂的过渡动画。

可能存在的问题

1、由于Bodymovin 插件的问题,有部分 AE 效果无法成功导出;

2、Lottie 对 json 文件的支持待完善,有部分json 文件的效果在移动端上不能很好的展现;

怎样导出Json文件?

流程图.jpg

使用Lottie库播放动画
1、将Json文件拖入我们的工程中
2、API操控

@interface LottieRootViewController () // lottie动画视图@property (nonatomic, strong) LOTAnimationView *lottieLogo;@end@implementation LottieRootViewController- (void)viewDidLoad {  [super viewDidLoad];// animationNamed: 动画的Json文件名称  self.lottieLogo = [LOTAnimationView animationNamed:@"LottieAnimation"];  self.lottieLogo.contentMode = UIViewContentModeScaleAspectFill;  self.lottieLogo.frame = CGRectMake(0, 0, self.view.bounds.size.width,      self.view.bounds.size.height * 0.3);  [self.view addSubview:self.lottieLogo];}- (void)viewWillAppear:(BOOL)animated {  [super viewWillAppear:animated];// 播放动画  [self.lottieLogo play];}- (void)viewDidDisappear:(BOOL)animated {  [super viewDidDisappear:animated];// 暂停动画  [self.lottieLogo pause];}

部分API接口

// Json动画名称+ (instancetype)animationNamed:(NSString *)animationName;// 网络加载 JSON 文件- (instancetype)initWithContentsOfURL:(NSURL *)url;// 循环播放@property (nonatomic, assign) BOOL loopAnimation;// 动画进度@property (nonatomic, assign) CGFloat animationProgress;// 动画速度@property (nonatomic, assign) CGFloat animationSpeed;// 动画持续时间@property (nonatomic, readonly) CGFloat animationDuration;// 播放完成回调- (void)playWithCompletion:(LOTAnimationCompletionBlock)completion;// 播放- (void)play;// 暂停- (void)pause;

转场动画

/**  @param animation The name:动画名称  @param fromLayer The name :自定义层掩盖fromVC  @param toLayer The name :自定义层掩盖toVC */  LOTAnimationTransitionController *animationController = [[LOTAnimationTransitionController alloc] initWithAnimationNamed:@"vcTransition1"                                                                                                          fromLayerNamed:@"outLayer"                                                                                                            toLayerNamed:@"inLayer"];

要想更多的感受lottie动画的魅力,我们先一起去研究AE吧~~

更多相关文章

  1. 一款常用的 Squid 日志分析工具
  2. GitHub 标星 8K+!一款开源替代 ls 的工具你值得拥有!
  3. RHEL 6 下 DHCP+TFTP+FTP+PXE+Kickstart 实现无人值守安装
  4. Linux 环境下实战 Rsync 备份工具及配置 rsync+inotify 实时同步
  5. 使用CMake来进行Android(安卓)NDK开发
  6. 总结一下各大开发板android烧写方式
  7. Android学习之ListView控件
  8. [置顶] Android调用JNI的简单实例(附详细步骤)
  9. Android中preference的使用

随机推荐

  1. Gas费用持续攀升!NA公链 NAC公链如何破解
  2. 干货|吴恩达教你如何应用机器学习的技巧~
  3. box-sizing
  4. 用grid仿php.cn首页,grid实现媒体查询
  5. box-sizing功能。相对定位与绝对定位。绝
  6. Vivado软件使用之"下载配置"流程
  7. 干货|咦?还可以这样图解Word2Vec
  8. STM32最小系统电路-设计教程
  9. 干货|MIT线性代数课程精细笔记[第二课]
  10. 点到点IPSec ***配置