2016-11-09 22 views
2

現在、アプリケーションが現在表示されていないView Controllerを削除するにはどうすればよいですか?他のUIViewControllerからView Controllerを削除するSwift iOS

ここで、私はOldViewControllerからNewViewControllerに切り替えます。 NewVCがロードされると、アプリがまだNewVC上にある間に、どうすればOldVCを削除できますか?

+0

また、どのコントローラをOldViewControllerの代わりに表示したいですか? – alexburtnik

+0

A - > B(モーダルでA以上) - > C(モーダルB以上)、CからAに復帰したいのですか? – alexburtnik

+0

私はビューコントローラ階層のアイデアを与えるために投稿を編集しました – EvanOgo

答えて

1

私はunwind seguesdismiss nested presentingViewControllerソリューションを試しましたが、どちらも中間のコントローラがアニメーション中に見える問題があります。

次に、これは私が適切に動作していなかったため、異なるスナップショットの世代で変更したsuggestionでした。

恐らく最良の解決策ではありませんが、依然として参考になるかもしれません。

ヘルパー拡張子:

extension UIViewController { 
    func dismissModalStack(animated: Bool, completion: (()->Void)?) { 
     guard let snapshot = UIApplication.shared.delegate?.window??.snapshotView() else { return } 
     self.presentedViewController?.view.insertSubview(snapshot, at: Int.max) 
     self.dismiss(animated: true, completion: completion) 
    } 
} 

extension UIView { 
    public func snapshotImage() -> UIImage? { 
     UIGraphicsBeginImageContextWithOptions(bounds.size, isOpaque, 0) 
     drawHierarchy(in: bounds, afterScreenUpdates: false) 
     let snapshotImage = UIGraphicsGetImageFromCurrentImageContext() 
     UIGraphicsEndImageContext() 
     return snapshotImage 
    } 

    public func snapshotView() -> UIView? { 
     guard let snapshotImage = snapshotImage() else { return nil } 
     return UIImageView(image: snapshotImage) 
    } 
} 

使用方法:最後の提示ビューコントローラで

@IBAction func dismissPressed() { 
    self.presentingViewController?.presentingViewController?.dismissModalStack(animated: true, completion: nil) 
} 

結果:

enter image description here

関連する問題