You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

将Adobe After Effects动画导入Xcode及Web时遇问题求助

排查Lottie动画导入Xcode/网页端异常的实用步骤

我之前在用Duik做角色绑定、bodymovin导出JSON后,也碰到过Lottie加载异常的情况,结合你的场景,给你梳理几个最容易踩坑的排查点:

  • 先确认导出环节的正确性
    别着急往Xcode里导,先在AE的bodymovin面板里预览动画,如果预览就有异常(比如角色肢体错位、动画不播放),那问题肯定出在导出设置上。检查下bodymovin的导出选项:有没有勾选「Export All Properties」?Duik绑定的控制器图层有没有被隐藏或禁用?另外,尽量避免导出时包含AE里的隐藏图层、空图层,这些可能会干扰Lottie解析。

  • 核对Lottie与bodymovin的版本兼容性
    新版本的bodymovin导出的JSON结构可能会有更新,旧版的Lottie框架(不管是iOS还是网页端)可能无法正确解析。建议把Lottie-ios升级到最新版本,同时确保bodymovin也是AE里的最新插件版本,版本匹配能解决80%的兼容性问题。

  • 检查Xcode里的代码实现细节
    很多时候异常是代码里的小疏漏导致的:

    1. 确保动画JSON文件已经加入到项目的「Copy Bundle Resources」中(在Xcode的Target -> Build Phases里查看),不然代码找不到文件。
    2. 初始化LottieAnimationView时,文件名不要带.json后缀,比如你的文件叫character_animation.json,代码里写LottieAnimationView(name: "character_animation")就好。
    3. 给动画视图设置合适的frame或Auto Layout约束,比如:
      let animationView = LottieAnimationView(name: "character_animation")
      animationView.translatesAutoresizingMaskIntoConstraints = false
      view.addSubview(animationView)
      NSLayoutConstraint.activate([
          animationView.centerXAnchor.constraint(equalTo: view.centerXAnchor),
          animationView.centerYAnchor.constraint(equalTo: view.centerYAnchor),
          animationView.widthAnchor.constraint(equalToConstant: 300),
          animationView.heightAnchor.constraint(equalToConstant: 400)
      ])
      animationView.contentMode = .scaleAspectFit
      animationView.loopMode = .loop
      animationView.play()
      

    如果没设置约束或frame,动画视图可能会被压缩成0尺寸,看起来就像“异常”。

  • 排查Duik绑定的兼容性问题
    Duik的某些高级绑定(比如复杂IK链、自定义表达式驱动的动画)可能不在Lottie的支持范围内。你可以做个测试:把绑定好的角色动画预合成,然后删除原绑定控制器图层,只导出预合成的动画,如果能正常播放,那就是原绑定里的某些元素不兼容。这时候需要在AE里调整:比如替换Lottie不支持的表达式,或者把动态绑定的部分转换成关键帧动画后再导出。

  • 网页端额外排查点
    如果网页端也有问题,除了版本匹配,还要检查:

    • 动画容器的CSS尺寸是否设置正确,避免动画被拉伸或截断。
    • 如果是从外部加载JSON,确认没有跨域请求的限制。
    • 初始化Lottie-web时,是否正确指定了容器元素,比如:
      const animation = lottie.loadAnimation({
        container: document.getElementById('lottie-container'),
        renderer: 'svg',
        loop: true,
        autoplay: true,
        path: 'character_animation.json'
      });
      

内容的提问来源于stack exchange,提问作者Lasse Bickmann

火山引擎 最新活动