Анимация постепенного появления цепочки не работает: появляется только вид

Я пытаюсь использовать цепочку анимации постепенного исчезновения, чтобы объекты исчезали по порядку. Сначала я делаю так, чтобы вид исчезал, затем остальные метки должны последовать их примеру. Ярлыки находятся в виде стека с альфа-каналом 1.0. Я убедился, что все остальные альфа-значения начинаются с нуля. Вот моя функция:

func fadeIn() {
    UIView.animate(withDuration: 0.5, delay: 0.0, options: UIView.AnimationOptions.curveEaseIn, animations: {
        self.view.alpha = 1.0
    }, completion: { finished in
        if finished {
            UIView.animate(withDuration: 0.5, delay: 0.0, options: UIView.AnimationOptions.curveEaseIn, animations: {
                self.gameOverLabel.alpha = 1.0
            }, completion: { finished in
                if finished {
                    UIView.animate(withDuration: 0.5, delay: 0.0, options: UIView.AnimationOptions.curveEaseIn, animations: {
                        self.scoreLabel.alpha = 1.0
                    }, completion: { finished in
                        if finished {
                            UIView.animate(withDuration: 0.5, delay: 0.0, options: UIView.AnimationOptions.curveEaseIn, animations: {
                                self.highScoreLabel.alpha = 1.0
                            }, completion: { finished in
                                if finished {
                                    UIView.animate(withDuration: 0.5, delay: 0.0, options: UIView.AnimationOptions.curveEaseIn, animations: {
                                        self.restartButton.alpha = 1.0
                                    }, completion: nil)
                                    //breakpoint set here
                                }
                            })
                        }
                    })
                }
            })
        }
    })
}

Я установил точку останова после того, как все анимации были завершены (как показано выше) и все альфа-значения были 1.0. Однако устройство просто дает мне пустой белый экран. Что происходит?

P.S. Функция вызывается сразу после представления этого контроллера представления:

view.present(vc, animated: false, completion: {
    vc.fadeIn()
})

person Xcoder    schedule 13.06.2019    source источник
comment
Возможно, вам потребуется поместить эту операцию анимации в представление viewDidAppear представленного представления. Я думаю, что операции анимации могут быть недействительными до тех пор, пока они не будут вызваны, и completion в функции present может произойти до этого.   -  person jake    schedule 14.06.2019
comment
@jake Спасибо за предложение. Я поместил вызов этой функции в viewDidAppear, но он по-прежнему показывал тот же белый экран. По какой-то причине только альфа представления получает анимацию до 1.   -  person Xcoder    schedule 14.06.2019
comment
Я в замешательстве. Вы сказали, что в точке останова все альфа-значения были 1.0, так что вы говорите, что все после первой анимации не вызывается?   -  person jake    schedule 14.06.2019
comment
@jake Это именно проблема. Объекты не отображаются на экране, хотя все альфа-значения равны 1.0. Я не уверен, что делать в этот момент.   -  person Xcoder    schedule 14.06.2019
comment
Если это так, то я в тупике, так как не могу воссоздать эту проблему. Мой единственный совет: убедитесь, что вы нигде не меняете значения alpha и не устанавливаете isHidden (также вы можете рассмотреть возможность использования ключевых кадров вместо этого адского обратного вызова).   -  person jake    schedule 14.06.2019


Ответы (1)


Попробуйте добавить параметр .layoutSubviews в свою анимацию. Как это:

UIView.animate(withDuration: 1.0, delay: 0.0, options: UIView.AnimationOptions.layoutSubviews, animations: {
    // animate here
})

Из документов Apple этот параметр делает следующее:

Размещайте подпредставления во время фиксации, чтобы они анимировались вместе с их родителем.

Возможно, подпредставления еще не выложены во время фиксации из-за того, что они представлены.

person jake    schedule 15.06.2019