Анимация внутри упорядоченного подпредставления в uistackview "прыжки" - PullRequest
0 голосов
/ 01 мая 2019

У меня есть горизонтальный UIStackView, содержащий несколько упорядоченных подпредставлений.

Я хочу удалить одно упорядоченное подпредставление (назовем его A), когда пользователь нажимает кнопку, но перед этим я хочу сделать быстрыйанимация.Я хочу сделать свою собственную анимацию, поэтому я не могу анимировать только stackView.removeArrangedSubview, которая будет выполнять базовую анимацию по умолчанию, а не ту, которая мне нужна.

Внутри A у меня есть другое представление (назовем его B) с центрами X и центрированными с использованием Auto Layout.

Когда я анимирую константу A.widthAnchor. моего организованного Sububview A в 0, так что другие arrangedsubviews постепенно приходят на место этого, потомки B теряют непосредственно перед анимацией свой CenterX и уходят влево,Или, может быть, он не теряет centerX, но он центрируется на крошечном A (который имеет ширину = 0 и начинается слева), но A не должен иметь ширину до 0 сразу, но после завершения анимации ...

Я стараюсь изо всех сил, чтобы ясно объяснить, но я знаю, что это может сбить с толку.Вот видео, показывающее проблему.Изображение (B), которое в виде arrangedsubview A (взяв весь экран) «прыгает» слева до начала анимации.

https://drive.google.com/open?id=1nTDRe5zirbuQi86WVBTuU-iDU8aq0lcw

Вот мой очень простойкод для создания этой анимации:

   UIView.animate(withDuration:4,delay:0, options:.curveEaseInOut, animations : {

        self.c.constant = 0 // c is A.widthAnchor constraint
        self.stackView.layoutIfNeeded()

    },completion: { _ in
        // done
    })

1 Ответ

0 голосов
/ 01 мая 2019

Я нашел себя: На самом деле проблема была в том, что когда я делаю

Stackview.layoutIfNeeded()

То, что находится внутри стека, может анимировать, но не само изображение стека. Таким образом, представление стека обновило свою ширину до начала анимации Я только что изменился на

superviewThatContainTheStackView.layoutIfNeeded()

Так что теперь все работает:)

...