在 Swift 5 中更改 Lottie AnimationView 大小

Chr*_*ris 6 json ios autolayout swift lottie

我正在尝试在我的应用程序中实现 Lottie AnimationView,但在调整视图大小时遇到​​问题。

我就是这样setup/constrainAnimationView

@objc func showAnimationTapped(){



    let logoAnimation = AnimationView(name: "StrokeAnimation")
    logoAnimation.contentMode = .scaleAspectFit
    self.view.addSubview(logoAnimation)

    logoAnimation.centerXAnchor.constraint(equalTo: view.centerXAnchor).isActive = true
    logoAnimation.centerYAnchor.constraint(equalTo: view.centerYAnchor).isActive = true
    logoAnimation.heightAnchor.constraint(equalToConstant: 200).isActive = true
    logoAnimation.widthAnchor.constraint(equalToConstant: 200).isActive = true

    logoAnimation.play()

}
Run Code Online (Sandbox Code Playgroud)

问题是 XCode 打破了所有约束并且AnimationView错误地放置/缩放。我还检查了View HirarchyAnimationView实际上覆盖了整个屏幕...也尝试过,CGRect但这并没有改变任何东西。

如何在 Swift 5 中调整动画大小/约束动画?

我找不到关于这个主题的任何内容..我感谢每一个帮助!

也许我的 AE 文件有问题,因为当我在Lottiefiles.com上预览它时,“描边”与我的 AE 文件中的动画不同。

不过我也用直接来自 Lottie 的文件进行了测试,这导致了同样的问题......

所以也许有 Swift/Lottie/AfterEffects 专家可以在这里帮助我:)

这是我的AE 文件+ JSON 文件,以便更好地理解。如果有任何不清楚的地方,请告诉我。

den*_*lor 5

由于您手动给出自己的约束,因此您忘记禁用(将其设置为 false)translatesAutoresizingMaskIntoConstraints,请尝试以下操作:

\n\n
@objc func showAnimationTapped(){\n    let logoAnimation = AnimationView(name: "StrokeAnimation")\n    logoAnimation.contentMode = .scaleAspectFit\n    logoAnimation.translatesAutoresizingMaskIntoConstraints = false\n    self.view.addSubview(logoAnimation)\n\n    logoAnimation.centerXAnchor.constraint(equalTo: view.centerXAnchor).isActive = true\n    logoAnimation.centerYAnchor.constraint(equalTo: view.centerYAnchor).isActive = true\n    logoAnimation.heightAnchor.constraint(equalToConstant: 200).isActive = true\n    logoAnimation.widthAnchor.constraint(equalToConstant: 200).isActive = true\n\n    logoAnimation.play()\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

请记住,如果translatesAutoresizingMaskIntoConstraints设置为 true (默认情况下),系统会根据 view\xe2\x80\x99s 框架及其自动调整大小掩码自动创建一组约束,但您不希望这样,您显然希望像在代码中一样设置您自己的约束。

\n\n

旁注:请注意,showAnimationTapped()可能会被多次调用,并且您不想logoAnimation每次都添加视图,否则会使您的 UI 性能最差。也许您可以将其放入计算变量中,添加它并显示/隐藏它,或者只是将其放入计算变量中并添加/删除它。

\n