为什么这个 Lottie JSON 动画在构建时没有显示在 UIView 中?
Why is this Lottie JSON animation not showing in the UIView upon building?
这是我的 UIViewController:
import UIKit
import Lottie
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad() {
let rocketAnimationView = AnimationView()
//Set animation
let rocketAnimation = Animation.named("my-json-rocket-animation")
rocketAnimationView.animation = rocketAnimation
rocketAnimationView.play()
}
当我构建时,动画不显示——视图只是空白。我已尝试在 viewDidLoad()
中实现以下内容,这似乎有效,但我的动画无法缩放到我的整个视图:
let animation = Animation.named("my-json-rocket-animation")
animationView.animation = animation
animationView.contentMode = .scaleAspectFit
view.addSubview(animationView)
animationView.backgroundBehavior = .pauseAndRestore
animationView.translatesAutoresizingMaskIntoConstraints = false
animationView.topAnchor.constraint(equalTo: view.layoutMarginsGuide.topAnchor).isActive = true
animationView.leadingAnchor.constraint(equalTo: view.leadingAnchor).isActive = true
animationView.bottomAnchor.constraint(equalTo: view.layoutMarginsGuide.bottomAnchor).isActive = true
animationView.trailingAnchor.constraint(equalTo: view.trailingAnchor).isActive = true
animationView.setContentCompressionResistancePriority(.fittingSizeLevel, for: .horizontal)
我希望我的动画显示在视图中,但我的屏幕仍然空白。我是否需要创建一个新的 UIView 并将其与 class 类型的 AnimationView 的 IBOutlet 连接,然后以某种方式设置动画?我知道这可以通过在 3.1.2 版本之前简单地编写 animationView.setAnimation(named: "my-json-rocket-animation")
来实现,但我不确定它是否仍然可行。
我将 post 我的解决方案供将来遇到此问题的任何人使用,因为我认为 Airbnb 的文档关于为 UIView 设置动画有点含糊。问题是我基本上忘记了设置视图的框架大小,我不得不使用与 UIView 对应的 IBOutlet。
import UIKit
import Lottie
class ViewController: UIViewController {
@IBOutlet weak var lottieView: UIView!
let animationView = AnimationView()
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
animationView.animation = Animation.named("my-json-rocket-animation")
animationView.frame.size = lottieView.frame.size
animationView.contentMode = .scaleToFill
lottieView.addSubview(animationView)
animationView.backgroundBehavior = .pauseAndRestore
animationView.play()
}
}
这是我的 UIViewController:
import UIKit
import Lottie
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad() {
let rocketAnimationView = AnimationView()
//Set animation
let rocketAnimation = Animation.named("my-json-rocket-animation")
rocketAnimationView.animation = rocketAnimation
rocketAnimationView.play()
}
当我构建时,动画不显示——视图只是空白。我已尝试在 viewDidLoad()
中实现以下内容,这似乎有效,但我的动画无法缩放到我的整个视图:
let animation = Animation.named("my-json-rocket-animation")
animationView.animation = animation
animationView.contentMode = .scaleAspectFit
view.addSubview(animationView)
animationView.backgroundBehavior = .pauseAndRestore
animationView.translatesAutoresizingMaskIntoConstraints = false
animationView.topAnchor.constraint(equalTo: view.layoutMarginsGuide.topAnchor).isActive = true
animationView.leadingAnchor.constraint(equalTo: view.leadingAnchor).isActive = true
animationView.bottomAnchor.constraint(equalTo: view.layoutMarginsGuide.bottomAnchor).isActive = true
animationView.trailingAnchor.constraint(equalTo: view.trailingAnchor).isActive = true
animationView.setContentCompressionResistancePriority(.fittingSizeLevel, for: .horizontal)
我希望我的动画显示在视图中,但我的屏幕仍然空白。我是否需要创建一个新的 UIView 并将其与 class 类型的 AnimationView 的 IBOutlet 连接,然后以某种方式设置动画?我知道这可以通过在 3.1.2 版本之前简单地编写 animationView.setAnimation(named: "my-json-rocket-animation")
来实现,但我不确定它是否仍然可行。
我将 post 我的解决方案供将来遇到此问题的任何人使用,因为我认为 Airbnb 的文档关于为 UIView 设置动画有点含糊。问题是我基本上忘记了设置视图的框架大小,我不得不使用与 UIView 对应的 IBOutlet。
import UIKit
import Lottie
class ViewController: UIViewController {
@IBOutlet weak var lottieView: UIView!
let animationView = AnimationView()
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
animationView.animation = Animation.named("my-json-rocket-animation")
animationView.frame.size = lottieView.frame.size
animationView.contentMode = .scaleToFill
lottieView.addSubview(animationView)
animationView.backgroundBehavior = .pauseAndRestore
animationView.play()
}
}