有几个与此有关的问题(或资源):
Present an UIAlertController with a SpriteKit scene (Objective-C)
Displaying a UIAlertController in GameScene (SpriteKit/Swift)
所以我很抱歉添加了类似的问题。但是,我试图实施这些解决方案但没有成功。
为了使这个问题比上述问题更具体,让我们使用M.W.E. (Stack Overflow SKSpriteKit)在其他两个Swift相关问题中提出:
M.W.E.
有一个主UIViewController
,GameViewController
调出主菜单场景,即SKView
。各种自定义SKView
链接循环:
菜单 - >难度 - >游戏 - >得分 - >菜单 - >等
我提到这一点,因为在上述大多数问题中,必须将UIAlertController
添加到主UIViewController
。我只是想确保只有GameScene
可以呈现UIAlertController
而不会呈现其他场景。
如何仅从UIAlertController
中的一个实现SKView
可调用?以前的一些答案只有主GameViewController
和GameScene
,然后GameScene
(GameViewController
中的常量)对GameViewController
的引用}。由于在此代码中,GameScene
直到很久以后才被访问,如何实现(理想情况下,不会通过各种GameViewController
传播对SKView
的引用。< / p>
回答此问题时请使用M.W.E.。
在另一个相关问题中,
Swift3: UISwipeGestureRecognizer in only one of putatively many SKViews,它提出了如何为一个UIGestureRecognizer
实施SKView
。理想情况下,UIAlertController
将在该操作后显示 - 作为游戏菜单中的一种。
答案 0 :(得分:2)
UIAlert
是一个UIKit
元素,因此您只需很少的代码就可以轻松地在SKScene
视频中显示您想要的位置。
换句话说,您可以访问显示应用内容的主window
,然后使用提供窗口内容视图的rootViewController
。
代码示例:
if sprite.contains(touchLocation) {
print("You tapped the blue sprite")
let alert = UIAlertController(title: "Alert", message: "Message", preferredStyle: UIAlertControllerStyle.alert)
let action = UIAlertAction(title: "Ok", style: .default) { action in
// Handle when button is clicked
}
alert.addAction(action)
if let vc = self.scene?.view?.window?.rootViewController {
vc.present(alert, animated: true, completion: nil)
}
}
答案 1 :(得分:0)
似乎是一个很长的问题。你想在SKScenes中展示UIAlertController吗?无需从SKScenes引用GameViewController,只需在根视图控制器上显示警报。
因此,要直接从您的某个SKScenes出示,您可以这样说
view?.window?.rootViewController?.present(YOURALERTCONTROLLER, animated: true)
希望这有帮助