Почему эта анимация Lottie JSON не отображается в UIView при сборке?

Это мой 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 и соединять его с IBOutlet типа класса AnimationView, а затем как-то устанавливать анимацию? Я знаю, что это было возможно, просто написав animationView.setAnimation(named: "my-json-rocket-animation") до версии 3.1.2, но я не уверен, возможно ли это еще.

Любая помощь приветствуется!


person Sergio Charles    schedule 26.07.2019    source источник


Ответы (1)


Я опубликую свое решение для всех, у кого возникнут проблемы с этим в будущем, так как я думаю, что документация Airbnb немного расплывчата относительно настройки анимации для UIView. Проблема заключалась в том, что я по сути забыл установить размер кадра представления, и мне пришлось использовать IBOutlet, соответствующий UIView.

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

   }
}
person Sergio Charles    schedule 27.07.2019