通常,当你从另一个 viewController 呈现一个 viewController 时,你会:
let vc : UIViewController = storyboard.instantiateViewControllerWithIdentifier("viewController") as UIViewController;
self.presentViewController(vc, animated: true, completion: nil);
我想从 SKScene 呈现一个 viewController。我还没有找到任何方法可以做到这一点。 这个问题可能是重复的,但我刚刚在 Objective C 中找到了答案,这对我来说没有意义
在场景类中尝试以下操作:
var currentViewController:UIViewController=UIApplication.sharedApplication().keyWindow.rootViewController!
currentViewController.presentViewController(viewController, animated: true, completion: nil)
希望有帮助。
今天我试图解决这个问题,在我的游戏中我需要展示我的
PayWallViewController
,UIAlertViewController
,UIReferenceLibraryViewController
,实际上没有找到任何有关此案例的文档。
经过几个小时的思考和谷歌搜索后,我发现了一些解决问题的方法,并决定在这里分享它们。每种方法都有其优点和潜在缺点,具体取决于您的具体需求和项目的复杂性。
它允许您直接访问,无需中介,并且比其他方法更快,但可能会导致内存管理问题,模块化程度较低且难以维护
促进松耦合,允许更好的关注点分离,更灵活,如果需要的话可以轻松广播到多个监听器,并且不需要阻塞主线程。同时比其他方法稍慢并且难以调试
通过清晰的通信路径保持松散耦合,更灵活和可读,但需要良好的文档记录
示例代码:
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