如何从 SKScene 呈现 UIViewController

问题描述 投票:0回答:2

通常,当你从另一个 viewController 呈现一个 viewController 时,你会:

let vc : UIViewController = storyboard.instantiateViewControllerWithIdentifier("viewController") as UIViewController;
self.presentViewController(vc, animated: true, completion: nil);

我想从 SKScene 呈现一个 viewController。我还没有找到任何方法可以做到这一点。 这个问题可能是重复的,但我刚刚在 Objective C 中找到了答案,这对我来说没有意义

swift uiviewcontroller sprite-kit skscene
2个回答
9
投票

在场景类中尝试以下操作:

var currentViewController:UIViewController=UIApplication.sharedApplication().keyWindow.rootViewController!

currentViewController.presentViewController(viewController, animated: true, completion: nil)

希望有帮助。


0
投票

今天我试图解决这个问题,在我的游戏中我需要展示我的

PayWallViewController
UIAlertViewController
UIReferenceLibraryViewController
,实际上没有找到任何有关此案例的文档。

经过几个小时的思考和谷歌搜索后,我发现了一些解决问题的方法,并决定在这里分享它们。每种方法都有其优点和潜在缺点,具体取决于您的具体需求和项目的复杂性。

  1. 在场景中保存 ViewController 的引用

它允许您直接访问,无需中介,并且比其他方法更快,但可能会导致内存管理问题,模块化程度较低且难以维护

  1. 使用通知中心:

促进松耦合,允许更好的关注点分离,更灵活,如果需要的话可以轻松广播到多个监听器,并且不需要阻塞主线程。同时比其他方法稍慢并且难以调试

  1. 基于块的通信

通过清晰的通信路径保持松散耦合,更灵活和可读,但需要良好的文档记录

示例代码:

var onRequestAlert: (() -> Void)? // Add it in your scene and call it when you need
scene.onRequestAlert = { [weak self] in self?.presentAlert() } // listen to trigger inside your ViewController
© www.soinside.com 2019 - 2024. All rights reserved.