Как исправить этот старый глюк рамки, появляющийся при анимации вида? - PullRequest
0 голосов
/ 03 мая 2019

У меня есть представление заголовка, которое содержит представление пейджера (FSPagerView), в котором есть элемент (FSPagerViewCell), который содержит гистограмму, 2019, годовой обзор текстов. Я пытаюсь уменьшить заголовок в определенное время с таким кодом:

private func setSelfHeightAnimated(height: CGFloat)
{
    UIView.animate(withDuration: 0.2, animations: {
        self.selfHeightAnchor.constant = height
        self.superview?.layoutIfNeeded()
    })
}

private func setPagerHeightAnimated(height: CGFloat)
{
    UIView.animate(withDuration: 0.2, animations: {
        self.pagerHeightAnchor.constant = height
        self.layoutIfNeeded()
//            self.pagerView.layoutIfNeeded()
//            self.pagerView.layoutSubviews()
//            self.pagerView.cellForItem(at: 0)?.layoutIfNeeded()
//            self.pagerView.cellForItem(at: 0)?.setNeedsDisplay()
//            self.superview?.layoutIfNeeded()
//            self.setNeedsDisplay()
//            self.pagerView.setNeedsDisplay()
    })
}

Тем не менее, старый глюк кадра очень заметен. Чего не хватает? Вот видео: https://streamable.com/owsdi

enter image description here

Ответы [ 2 ]

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

Попробуйте, чтобы избежать сбоев.

private func setSelfHeightAnimated(height: CGFloat)
{
    self.selfHeightAnchor.constant = height

    UIView.animate(withDuration: 0.2, animations: {
        self.layoutIfNeeded()
        self.viewDidLayoutSubviews()
    })
}

private func setPagerHeightAnimated(height: CGFloat)
{
    self.pagerHeightAnchor.constant = height

    UIView.animate(withDuration: 0.2, animations: {
        self.layoutIfNeeded()
        self.viewDidLayoutSubviews()
    })
}
0 голосов
/ 07 мая 2019

У вас есть 1-й макет и 2-й макет, и анимация, которая ведет с 1-го на 2-й.
В настоящее время 1-й макет исчезает, а 2-й макет исчезает во время анимации, что дает вам«глюк».
Я предполагаю, что вы хотите достичь:
- верхняя часть (история, 2019 год, обзор за год) должна сохранять свою высоту, а
- только столбцы ниже должны уменьшаться / расширятьсяв то время как нижняя таблица перемещается вверх или вниз.
Решение, вероятно, заключается в том, что вы анимируете только высоту подпредставления, содержащего 2 столбца.
Если представление заголовка настроено на его высоту, тоЯ ожидаю, что требуемый эффект проявляется без сбоев.

РЕДАКТИРОВАТЬ:

Если вам окончательно пришлось анимировать верхнюю часть в целом, может быть одна возможность (которую я считаю уродливой) для установки альфа-значения History, 2019 и Yearдо 0 непосредственно перед началом анимации.Тогда эти тексты будут только исчезать, поэтому можно будет избежать сбоя с двойными изображениями в разных местах.

...