Изменить размер Lott ie AnimationView в Swift 5 - PullRequest
3 голосов
/ 02 марта 2020

Я пытаюсь реализовать Lott ie 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 неправильно размещается / масштабируется. Я также проверил View Hirarchy и AnimationView фактически покрывает весь экран ... Также попробовал это с CGRect, но это ничего не меняет.

Как я могу изменить размер / ограничить анимацию в Swift 5?

Я не мог найти что-нибудь по этой теме c .. Я благодарен за любую помощь!

Возможно, что-то не так с моим AE-файлом, потому что когда я Предварительный просмотр его на Lottiefiles.com «Удар» - это не та же анимация, что и в моем AE-файле.

Однако я также протестировал его с файлом непосредственно из Lott ie, и это вызвал ту же проблему ...

Так что, может быть, есть эксперт Swift / Lottie / AfterEffects, который может помочь мне здесь:)

Вот мой AE-файл + JSON -файл для лучшего понимания. Если что-то неясно, просто дайте мне знать.

1 Ответ

2 голосов
/ 02 марта 2020

Поскольку вы задаете собственное ограничение вручную, вы забыли отключить (установить его на 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 представление каждый раз, иначе это ухудшит производительность вашего интерфейса. Может быть, вы можете поместить его в вычисляемую переменную, добавить и показать / скрыть или просто поместить в вычисленную переменную и добавить / удалить.

...