SwiftUI Lottie动画尺寸不一致的问题
SwiftUI Lottie动画尺寸不一致的问题

SwiftUI Lottie动画尺寸不一致的问题

在SwiftUI中,使用Lottie动画时,存在每个动画的显示大小不一致问题。就需要对每一个动画设置相同的尺寸。

我尝试通过修改Lottie动画的显示代码,但没有实现大小相等的情况,此外还有比较小的动画也不应该显示的很大。因此需要个性化修改。

解决方案

方案1、设置scaleEffect

定义一个字典 animationScaleMap,其中 键为动画名称,值为对应的缩放比例。

根据 LoopAnimation 取出对应的缩放值,然后在 .scaleEffect() 里应用这个缩放比例。

struct ContentView: View {
    /// **存储动画的缩放比例**
    let animationScaleMap: [String: CGFloat] = [
        "Home0": 1.0,
        "Home1": 0.8,
        ...
    ]
    
    var body: some View {
        ForEach(backgroundRange, id: \.self) { index in
            Button(action: {}, label: {
                let animationName = "Home\(index)"
                let scale = animationScaleMap[animationName] ?? 1.0  // 获取缩放比例,默认 1.0
                LottieView(filename: animationName)
                    .scaleEffect(scale) // **应用缩放比例**
            })
        }
    }
}

通过字典可以调整每个动画的缩放比例,做到尺寸相等。

如果需要设置的缩放比例字典代码过长,比如有60个动画,那么可以考虑将缩放比例字典代码放在单独的一个Swift文件中。

新建一个 Swift 文件,命名为 AnimationScaleConfig.swift。

import SwiftUI

struct AnimationScaleConfig {
    static let animationScaleMap: [String: CGFloat] = [
        "Home0": 1.0,
        "Home1": 0.8,
		...
        // 继续添加你的动画缩放值
    ]

    // 获取动画对应的缩放值,默认返回 1.0
    static func scale(for animationName: String) -> CGFloat {
        return animationScaleMap[animationName] ?? 1.0
    }
}

	ContentView.swift 中使用
LottieView(filename: "Home\(index)")
    .scaleEffect(AnimationScaleConfig.scale(for: "Home\(index)")) // 直接调用获取缩放值

方案二、在AE(After Effects)+ Bodymovin 重新导出

如果有 AE(Adobe After Effects) 和 Bodymovin 插件,可以:

1、重新调整动画画布尺寸(调整 Composition Settings)。

2、导出新的 Lottie JSON 文件。

3、替换原来的 Lottie 文件。

注意:未实际测试过AE导出,如果未下载AE,则慎重使用该方案。

如果您认为这篇文章给您带来了帮助,您可以在此通过支付宝或者微信打赏网站开放者。

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注