如何在已经呈现的控制器上介绍新控制器



在我的应用中,我正在通过自定义相机捕获图像。因此,在捕获图像时,我正在呈现控制器,因此它在中心显示相机,看起来就像捕获图像。在这里,它的代码

    let layerVC = cameraLayerViewController(nibName: "cameraLayerViewController", bundle: nil)
            layerVC.modalPresentationStyle = .custom
            Global.appDelegate.window?.rootViewController?.presentedViewController?.present(layerVC, animated: false, completion: nil)
            DispatchQueue.main.asyncAfter(deadline: .now() + 0.4, execute: {
                layerVC.dismiss(animated: false, completion: nil)
}

但是,当更改相机模式时,我在同一控制器上介绍另一个控制器

if (UserDefaults.standard.value(forKey: Global.g_UserDefaultKey.isFrontCamera) as? Bool == true)
    {
        UserDefaults.standard.set(false, forKey: Global.g_UserDefaultKey.isFrontCamera)
        let controller : CameraVC = CameraVC(nibName: "CameraVC", bundle: nil)
        self.present(controller, animated: false, completion: nil)
    }
    else
    {
        UserDefaults.standard.set(true, forKey: Global.g_UserDefaultKey.isFrontCamera)
        let controller : CameraVC = CameraVC(nibName: "CameraVC", bundle: nil)
        self.present(controller, animated: false, completion: nil)
    }

现在,当在此控制器上,我试图显示任何控制器无法正常工作。

    let layerVC = cameraLayerViewController(nibName: "cameraLayerViewController", bundle: nil)
            layerVC.modalPresentationStyle = .custom
            Global.appDelegate.window?.rootViewController?.presentedViewController?.present(layerVC, animated: false, completion: nil)
            DispatchQueue.main.asyncAfter(deadline: .now() + 0.4, execute: {
                layerVC.dismiss(animated: false, completion: nil)
}

所以让我知道如何在已经呈现的控制器上介绍控制器。

从根中呈现第一个视图控制器:

let root = UIApplication.shared.keyWindow!.rootViewController!
let firstPresented = FirstViewController()
firstPresented.transitioningDelegate = yourPresentationDelegate
firstPresented.modalPresentationStyle = .custom
root.present(firstPresented, animated: false, completion: nil)

present第二视图控制器,您不能再次从根中 present,因为它已经存在,因此您必须从当前呈现的内容(即self(中进行present

let secondPresented = SecondViewController()
secondPresented.transitioningDelegate = yourPresentationDelegate
secondPresented.modalPresentationStyle = .custom
self.present(secondPresented, animated: false, completion: nil)

最新更新