在 Swift 5 内更改 Lottie AnimationView 大小
Change Lottie AnimationView size in Swift 5
我正在尝试在我的应用程序中实现 Lottie AnimationView
,但我无法调整视图大小。
我就是这样 setup/constrain
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
错误地 placed/scaled。我还检查了 View Hirarchy
并且 AnimationView
实际上覆盖了整个屏幕...还尝试了 CGRect
但这并没有改变任何东西。
如何resize/constrainSwift5中的动画?
我找不到关于这个主题的任何内容。非常感谢您的帮助!
也许我的 AE 文件有问题,因为当我在 Lottiefiles.com 上预览时,"Stroke" 与我的 AE 文件中的动画不同。
但是我也用直接来自 Lottie 的文件对其进行了测试,这导致了同样的问题...
所以也许 Swift/Lottie/AfterEffects 专家可以帮助我 :)
由于您手动给出了自己的约束,您忘记禁用(将其设置为 false)translatesAutoresizingMaskIntoConstraints
,试试这个:
@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性能最差。也许你可以把它放在一个计算变量中,添加它然后 show/hide 它或者只是把它放在一个计算变量中然后 add/remove 它。
我正在尝试在我的应用程序中实现 Lottie AnimationView
,但我无法调整视图大小。
我就是这样 setup/constrain
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
错误地 placed/scaled。我还检查了 View Hirarchy
并且 AnimationView
实际上覆盖了整个屏幕...还尝试了 CGRect
但这并没有改变任何东西。
如何resize/constrainSwift5中的动画?
我找不到关于这个主题的任何内容。非常感谢您的帮助!
也许我的 AE 文件有问题,因为当我在 Lottiefiles.com 上预览时,"Stroke" 与我的 AE 文件中的动画不同。
但是我也用直接来自 Lottie 的文件对其进行了测试,这导致了同样的问题...
所以也许 Swift/Lottie/AfterEffects 专家可以帮助我 :)
由于您手动给出了自己的约束,您忘记禁用(将其设置为 false)translatesAutoresizingMaskIntoConstraints
,试试这个:
@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性能最差。也许你可以把它放在一个计算变量中,添加它然后 show/hide 它或者只是把它放在一个计算变量中然后 add/remove 它。