Вы должны поместить все в один блок анимации:
Мне не удалось протестировать этот код - я даже не смог набрать его в Xcode и проверить синтаксис или скомпилировать его - поэтому, пожалуйста, простите меня, если он содержитопечатка или два. Но в целом так и должно работать ...
func removeAllChildrenWithAnimation() {
guard let children = viewController?.children else { return }
children.forEach { $0.willMove(toParent: nil) }
UIView.animate(withDuration: 0.25, animations: {
children.forEach { $0.viewIfLoaded?.alpha = 0.0 }
}, completion: { finished in
if finished {
children.forEach {
$0.viewIfLoaded?.removeFromSuperview()
$0.removeFromParent()
}
}
})
}