我正在使用从app delegate移动到一个新的视图控制器,使用我在堆栈溢出的某个地方找到的代码

    func changeRootViewController(with identifier:String!) {
    let storyboard = self.window?.rootViewController?.storyboard
    let desiredViewController = storyboard?.instantiateViewController(withIdentifier: identifier);

    let snapshot:UIView = (self.window?.snapshotView(afterScreenUpdates: true))!
    desiredViewController?.view.addSubview(snapshot);

    self.window?.rootViewController = desiredViewController;

    UIView.animate(withDuration: 0.3, animations: {() in
        snapshot.layer.opacity = 0;
        snapshot.layer.transform = CATransform3DMakeScale(1.5, 1.5, 1.5);
    }, completion: {
        (value: Bool) in
        snapshot.removeFromSuperview();
    });
}

它工作良好,我可以移动到一个新的视图控制器与动画(这是必需的)。但当我转到其他应用程序并返回时,该应用程序就会因错误而崩溃。
无法快照视图(;层=
>)不,因为
视图不在窗口中。使用后屏幕更新:是。致命错误:
在展开可选值时意外找到nil
从AppDelegate打开视图控制器的另一个代码
func showViewController(id: String){
    let mainStoryboard : UIStoryboard = UIStoryboard(name: "Main", bundle: nil)
    let initialViewControlleripad : UIViewController = mainStoryboard.instantiateViewController(withIdentifier: id) as UIViewController
    self.window = UIWindow(frame: UIScreen.main.bounds)
    self.window?.rootViewController = initialViewControlleripad
    self.window?.makeKeyAndVisible()
}

它工作得很好,但当尝试添加动画时,动画不工作。所以请帮助解决这些问题。

最佳答案

你试过动画吗?

UIView.transition(with: appDel.window!,
              duration: 0.25,
               options: .transitionCrossDissolve,
            animations: { appDel.window?.rootViewController = vc } ,
            completion: nil)

关于ios - 从AppDelegate移至 View Controller 后,Swift App崩溃,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45293749/

10-10 20:37