Swift3:在SKView

时间:2017-01-24 08:13:40

标签: swift uiviewcontroller sprite-kit uialertcontroller

注意:

有几个与此有关的问题(或资源):

所以我很抱歉添加了类似的问题。但是,我试图实施这些解决方案但没有成功。

为了使这个问题比上述问题更具体,让我们使用M.W.E. (Stack Overflow SKSpriteKit)在其他两个Swift相关问题中提出:

上下文:

M.W.E. 有一个主UIViewControllerGameViewController调出主菜单场景,即SKView。各种自定义SKView链接循环:

菜单 - >难度 - >游戏 - >得分 - >菜单 - >等

我提到这一点,因为在上述大多数问题中,必须将UIAlertController添加到主UIViewController。我只是想确保只有GameScene可以呈现UIAlertController而不会呈现其他场景。

问题:

如何仅从UIAlertController中的一个实现SKView可调用?以前的一些答案只有主GameViewControllerGameScene,然后GameSceneGameViewController中的常量)对GameViewController的引用}。由于在此代码中,GameScene直到很久以后才被访问,如何实现(理想情况下,不会通过各种GameViewController传播对SKView的引用。< / p>

回答此问题时请使用M.W.E.

目标:

在另一个相关问题中, Swift3: UISwipeGestureRecognizer in only one of putatively many SKViews,它提出了如何为一个UIGestureRecognizer实施SKView。理想情况下,UIAlertController将在该操作后显示 - 作为游戏菜单中的一种。

最低工作范例

StackOverflow SKSpriteKit

2 个答案:

答案 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)

希望这有帮助