kik*_*tas 5 uiviewcontroller ios presentviewcontroller
问题是我不知道如何解雇和呈现只有一个过渡动画的视图控制器.
我的故事板结构是:
我们可以说A控制器是在NavigationController之后,B是Startup引用,C是TabBar ViewController.既乙和Ç与一个模态呈现交叉溶解过渡.
当用户登录到应用程序(来自B)时,C控制器以模态方式呈现,具有翻转水平过渡.当用户注销(来自C)时,B以相同的方式呈现.在A控制器上,我根据用户是否记录执行直接segue到B或C.
我的问题是如果我不从B或C中解除以前的视图控制器,那么该控制器就会泄露.相反,如果我解除它,则在呈现目标控制器(B或C)之前显示A.
是否可以仅显示" 水平翻转"和"查看"视图?
我对这个问题的解决方案是替换当前的 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()
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1537 次 |
| 最近记录: |