将Adobe After Effects动画导入Xcode及Web时遇问题求助
我之前在用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里的代码实现细节
很多时候异常是代码里的小疏漏导致的:- 确保动画JSON文件已经加入到项目的「Copy Bundle Resources」中(在Xcode的Target -> Build Phases里查看),不然代码找不到文件。
- 初始化LottieAnimationView时,文件名不要带
.json后缀,比如你的文件叫character_animation.json,代码里写LottieAnimationView(name: "character_animation")就好。 - 给动画视图设置合适的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




