Как анимировать удаление всех дочерних UIViewControllers с помощью одной анимации? - PullRequest
0 голосов
/ 30 сентября 2019

Я хотел бы удалить все дочерние UIViewControllers с одной анимацией. Поэтому мне интересно, если я добавлю удаление анимации всем дочерним элементам при их повторении, будет ли оно отображаться правильно? Эффект, которого я хотел бы достичь, это всего лишь одна анимация для этого удаления.

func removeAllChildrenWithAnimation() {
    if let children = viewController?.children {
        for child in children {
            child.willMove(toParent: nil)
            UIView.animate(withDuration: 0.25, animations: {
                child.view.alpha = 0.0
            }) { (_) in
                child.view.removeFromSuperview()
                child.removeFromParent()
            }
        }
    }
}

1 Ответ

0 голосов
/ 01 октября 2019

Вы должны поместить все в один блок анимации:

Мне не удалось протестировать этот код - я даже не смог набрать его в 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()
            }
        }
    })
}
...