ios - 如何用一个动画删除所有子 UIViewController 的动画?

标签 ios swift uiviewcontroller uikit uianimation

我想用一个动画删除所有子 UIViewController。所以我想知道如果我在迭代所有子项时添加删除动画,它会正确显示吗?我想要实现的效果只是用于此删除的一个动画。

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()
            }
        }
    }
}

最佳答案

您应该将所有内容放在一个动画 block 中:

我无法测试这段代码 - 我什至无法在 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()
            }
        }
    })
}

关于ios - 如何用一个动画删除所有子 UIViewController 的动画?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58171264/

相关文章:

iphone - 如何在基于选项卡的应用程序中检查用户 secret ?

ios - 移动 xcode 项目导致红色文本(项目中缺少文件)

ios - NSUserDefaults - 保存数据以供使用和重用 - 每次新启动时都会删除?

swift : Replay AVAudioPlayer when song ends

ios - 在 iOS 上重新初始化 swift Realm DB 的正确方法?

swift - 为什么 "var delegate: UIApplicationDelegate?"在 UIApplication 中成为可选项?那会是 fatal error 吗?

Swift - Unwind segue 传回零值?

ios - AudioKit 在 IOS 上连接外部蓝牙麦克风

ios - Swift 自定义键盘 - 在键盘长按时显示额外的字母弹出窗口?

ios - 在 Storyboard中添加一个 View Controller