我所做的就是在没有内存问题的情况下实现这一目标。
首先在根视图控制器中创建一些协议(委托)。这个 viewcontroller 包含我们加载 skscene 的 SKView 视图。
因此,每当您想从 skscene 打开一个新的视图控制器时,只需调用协议即可。
这是mainViewcontroller中的一些代码:
protocol GameProtocol {
func displayViewController()
}
.
extension MainViewController: GameProtocol {
internal func displayViewController() {
let storyboard : UIStoryboard = UIStoryboard(name: "Main", bundle: nil)
let popoverVC = storyboard.instantiateViewController(withIdentifier: "SettingViewController") as! SettingViewController
// popoverVC.modalPresentationStyle = .fullScreen
// popoverVC.modalPresentationStyle = .popover
popoverVC.popoverPresentationController?.permittedArrowDirections = UIPopoverArrowDirection(rawValue: 0)
popoverVC.view.backgroundColor = UIColor.popBackgroundColor
popoverVC.modalPresentationStyle = .popover
popoverVC.popoverPresentationController!.delegate = self
popoverVC.popoverPresentationController!.sourceView = self.view
popoverVC.popoverPresentationController!.sourceRect = CGRect(x: 0.5, y: 0.5, width: 0, height: 0)
popoverVC.preferredContentSize = CGSize(width: self.view.frame.width, height: self.view.frame.height)
self.present(popoverVC,animated: false,completion: nil)
}
}
我在主控制器中有这段代码,用于在需要时弹出警报。在游戏场景中。
并且在游戏场景中
func showViewController() {
let viewe = self.view as! GameSceneView
viewe.myDelegate?. displayViewController()
}
希望你能得到这个。