在Swift 5中更改Lottie动画视图的大小

6

我想在我的应用程序中实现一个Lottie的AnimationView,但我遇到了调整视图大小的问题。

这是我如何设置/约束 AnimationView

@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()

}

问题在于XCode破坏了所有的约束条件,AnimationView定位/缩放错误。我还检查了View Hirarchy,实际上AnimationView覆盖了整个屏幕...也尝试使用CGRect但没有改变任何内容。
如何在Swift 5中调整动画大小/约束?
我在这个主题上找不到任何内容...感谢各位的帮助!
也许我的AE文件有问题,因为当我在Lottiefiles.com上预览时,“Stroke”与我的AE文件中的不同。
但我也用直接从Lottie下载的文件测试过,结果出现了同样的问题...
因此,也许有一个Swift/Lottie/AfterEffects专家能在这里帮助我:)
这是我的AE-File + JSON-file以便更好地理解。如果有任何不清楚的,请让我知道。

请查看此链接。已有答案。https://dev59.com/yazka4cB1Zd3GeqP_6Wh#65577860 - Mwangi Gituathi
1个回答

5

由于您手动添加了自定义约束,您忘记将 translatesAutoresizingMaskIntoConstraints 禁用(设置为 false),请尝试使用以下代码:

@objc func showAnimationTapped(){
    let logoAnimation = AnimationView(name: "StrokeAnimation")
    logoAnimation.contentMode = .scaleAspectFit
    logoAnimation.translatesAutoresizingMaskIntoConstraints = false
    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()
}

请记住,如果translatesAutoresizingMaskIntoConstraints被设置为true(默认情况下是这样的),系统会根据视图的框架和自动调整大小的掩码自动创建一组约束条件,但您并不希望这样,您明确希望像在代码中一样设置自己的约束条件。
顺便提一句:请注意showAnimationTapped()可能会被多次调用,您不希望每次都添加logoAnimation视图,否则它会使您的UI性能变差。也许您可以将其放在一个计算属性中,添加并显示/隐藏它,或者只是将其放在一个计算属性中并添加/删除它。

1
哦,我的天啊...原来是这样。昨天我因为忘记将其设置为false而卡了几个小时,啊啊。谢谢!不过,动画没有显示出来,只显示了“愿望清单”和标准字体,而且“描边”也没有了。你知道如何修复这个问题吗? - Chris
@Chris,你的AE动画可能有问题。我试了一下Lottie网站上找到的另一个动画,代码可以播放它。但是你的JSON似乎无法播放,所以看起来像是动画文件有问题。建议去Lottie的Github issues页面查看。 - denis_lor
1
@Chris,请再检查一下我的答案,包括“顺便说一句:…”部分,这可能对您有所帮助! - denis_lor

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接