[ios]swift 최상의 rootviewcontroller replace 하는 방법
예를 들어 메인에 있다가 로그인 하고 다시 메인으로 돌아 올시 스텍이 쌓일 수 있다..
uitransitionview이 계속 쌓이는걸 볼 수 있는데...
편안하게 최상위 rooview를 바꿔주면 초기화 되서 메인으로 돌아 갈 수 있다..
// 최상의 rootview 갱신
UIApplication.shared.keyWindow?.replaceRootViewController(WantController, animated: true, completion: nil)
extension UIWindow
{
func replaceRootViewController(_ replacementController: UIViewController, animated: Bool, completion: (() -> Void)?) {
let snapshotImageView = UIImageView(image: self.snapshot())
self.addSubview(snapshotImageView)
let dismissCompletion = { () -> Void in // dismiss all modal view controllers
self.rootViewController = replacementController
self.bringSubview(toFront: snapshotImageView)
if animated {
UIView.animate(withDuration: 0.4, animations: { () -> Void in
snapshotImageView.alpha = 0
}, completion: { (success) -> Void in
snapshotImageView.removeFromSuperview()
completion?()
})
}
else {
snapshotImageView.removeFromSuperview()
completion?()
}
}
if self.rootViewController!.presentedViewController != nil {
self.rootViewController!.dismiss(animated: false, completion: dismissCompletion)
}
else {
dismissCompletion()
}
}
func snapshot() -> UIImage {
UIGraphicsBeginImageContextWithOptions(bounds.size, false, UIScreen.main.scale)
drawHierarchy(in: bounds, afterScreenUpdates: true)
guard let result = UIGraphicsGetImageFromCurrentImageContext() else { return UIImage.init() }
UIGraphicsEndImageContext()
return result
}
}
[참조] https://stackoverflow.com/questions/15774003/changing-root-view-controller-of-a-ios-window
'ios,swift' 카테고리의 다른 글
[ios]swift navigationbar title color 변경방법 (0) | 2020.03.16 |
---|---|
[ios]swift scrollview touchesBegan 동작하지 않을 때 대체하는방법 (0) | 2020.03.16 |
[ios]swift Presenting modal in iOS 13 fullscreen (0) | 2020.03.10 |
[ios] ZXingObjC ZXCapture dissmiss할 시, exc_bad_access code=1 크래쉬 이슈 해결방법 (0) | 2020.03.05 |
[ios]swift collectionview get scoll position 알 수 있는 방법 (0) | 2020.03.04 |