问题是我不知道如何关闭和显示只有一个过渡动画的 View Controller 。
我的 Storyboard结构是:
我们可以说 A Controller 是 NavigationController 之后的 Controller ,B 是 Startup 引用,C 是 TabBar ViewController。 B 和 C 都以模态方式呈现,带有交叉溶解 过渡。
当用户(从B)登录到应用程序时,C Controller 会以水平翻转 转换模态呈现。当用户注销(从 C)时,B 以相同的方式显示。 在 A Controller 上,我根据用户是否登录执行直接转至 B 或 C。
我的问题是,如果我不从 B 或 C 中关闭以前的 View Controller ,该 Controller 就会泄露。相反,如果我拒绝它,A 会在目标 Controller (B 或 C)出现之前显示。
是否可以仅显示Flip Horizontal 过渡并跨过A View ?
最佳答案
我对这个问题的解决方案是替换当前的 rootViewController,支持不同的转换:
static func replaceRootViewController(with viewController: UIViewController, transition: UIViewAnimationOptions, completion: (() -> ())? = nil) {
if transition == .transitionCrossDissolve {
let overlayView = UIScreen.main.snapshotView(afterScreenUpdates: false)
viewController.view.addSubview(overlayView)
UIApplication.shared.keyWindow?.rootViewController = viewController
UIView.animate(withDuration: 0.65, delay: 0, options: transition, animations: {
overlayView.alpha = 0
}, completion: { finished in
overlayView.removeFromSuperview()
if let completion = completion{
completion()
}
})
} else {
_ = viewController.view
UIView.transition(with: UIApplication.shared.keyWindow!, duration: 0.65,options: transition, animations: {
UIApplication.shared.keyWindow?.rootViewController = viewController
}){_ in
if let completion = completion {
completion()
}
}
}
}
关于ios - 使用一个动画关闭和呈现模态视图 Controller ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41827981/