Ios 取消初始视图控制器的最佳方法?

Ios 取消初始视图控制器的最佳方法?,ios,swift,xcode,ios10,Ios,Swift,Xcode,Ios10,当我的应用程序启动时,我有一个加载视图控制器(它是我的初始视图控制器)。当此视图控制器中的动画完成时,我希望它显示另一个视图控制器,并随动画一起关闭视图控制器 加载视图控制器是初始视图控制器 当UIStoryboard.mflmaintabarviewcontroller()时,我有这个代码。返回要显示的视图控制器 func animationDidStop(_ anim: CAAnimation, finished flag: Bool) { let animationID = ani

当我的应用程序启动时,我有一个加载视图控制器(它是我的初始视图控制器)。当此视图控制器中的动画完成时,我希望它显示另一个视图控制器,并随动画一起关闭视图控制器

加载视图控制器是初始视图控制器

当UIStoryboard.mflmaintabarviewcontroller()时,我有这个代码。返回要显示的视图控制器

func animationDidStop(_ anim: CAAnimation, finished flag: Bool) {
    let animationID = anim.value(forKey: "animationID")
    if animationID as! NSString == "transform" {
        self.present(UIStoryboard.mflMainTabBarViewController(), animated: true, completion: {
            _ = self.popoverPresentationController
        })

    }
}
但当Denit从未被称为

deinit {
print("deinit")
}
取消初始化第一个视图控制器并使显示视图控制器成为根视图控制器的最佳方法是什么?

除非您正在执行非常专门的操作,否则不需要在Swift中取消初始化对象。当引用计数变为0时,将自动调用它。如果确实需要,您应该能够通过
AppDelegate
设置窗口的
rootViewController


但是,请注意,这样的维护很少是必要的

除非您正在做一些非常专业化的事情,否则不需要在Swift中对对象进行初始化。当引用计数变为0时,将自动调用它。如果确实需要,您应该能够通过
AppDelegate
设置窗口的
rootViewController


但是,请注意,这样的维护很少是必要的

在取消分配类实例之前立即调用deinitializer

以后你可以用

    if let delegate = UIApplication.shared.delegate as? AppDelegate {

        let storyboard : UIStoryboard? = UIStoryboard(name: "storyboardName", bundle: nil)
        let rootController = storyboard!.instantiateViewController(withIdentifier: "controllerIdentifier")

        delegate.window?.rootViewController = rootController
    }

在取消分配类实例之前立即调用deinitializer

以后你可以用

    if let delegate = UIApplication.shared.delegate as? AppDelegate {

        let storyboard : UIStoryboard? = UIStoryboard(name: "storyboardName", bundle: nil)
        let rootController = storyboard!.instantiateViewController(withIdentifier: "controllerIdentifier")

        delegate.window?.rootViewController = rootController
    }

我只想确保加载视图控制器确实获得了完成块(您有
\uu=self.popoverPresentationController
)将在演示文稿完成时调用。ViewController是否未显示?是的,视图控制器正在显示,但Denit func未在调试程序中调用它不会被调用,因为您的窗口仍将其引用为rootViewController(可能在其他地方,我看不到您的所有代码)。为什么需要调用deinit?我只想确保加载视图控制器确实获得了完成块(您有
\uu=self.popoOverpresentationController
)在演示文稿完成时将被调用。ViewController是否未显示?是的,视图控制器正在显示,但Denit func未在调试程序中调用它不会被调用,因为您的窗口仍将其引用为rootViewController(可能在其他地方,我看不到您的所有代码)。为什么需要调用deinit?有没有一种平滑的方法可以做到这一点?加载控制器可以调用dismise方法,您可以在completion方法中添加上面的代码。如果您需要deinit,您也可以添加代码。有没有一种平滑的方法可以做到这一点?加载控制器可以调用dismise方法,您可以在completion方法中添加上面的代码。如果需要deinit,还可以添加代码。