问题:如何从GameScene.swift中关闭ViewController?

情况:我的SpriteKit游戏中有2个VC,如下所示:

ViewController.swift ----按Play -----> GameViewController

当玩家失败时,我想解散GameViewController,以便玩家可以再次按一下play。我在GameScene.swift中检查玩家的损失,并希望从那里解散GameVC。

N.B .: 用Google搜索此方法未成功。

我尝试过的内容:

1)在我的GameScene.swift中创建一个gameVC实例并将其关闭,如下所示:

let gameVC = GameViewController()
gameVC.dismissViewController(false,completion: nil)

2)做:
self.view.window!.rootViewController?.dismissViewControllerAnimated(false, completion: nil)
那些由于明显原因而无法工作^^

最佳答案

您不想“抢”现有实例:https://pragprog.com/articles/tell-dont-ask

您需要将GameScene的引用交给视图控制器,以便它可以将其关闭,或者使用委托模式向后传达给控制对象,以使VC被关闭/关闭。

一个简单的示例……您可以在GameViewController中添加GameScene属性,然后在适当的时间关闭VC:

class GameScene: SKScene {
    var gameVC: GameViewController?

    func gameDidEnd() {
        gameVC?.dismissViewControllerAnimated(true) {
            // if desired, do any cleanup after the VC is dismissed
        }
    }
}

然后,首先在创建GameScene对象时设置此属性:
if let gameScene = GameScene(fileNamed: "MyScene") {
    gameScene.gameVC = someGameVC
}

这种简单的方法将把GameSceneGameViewController紧密地结合在一起,如果您想在不使用另一个对象的情况下使用其中一个对象,则将更加困难。但是对于这个简单的用例,可能很好。

关于ios - 如何从GameScene.swift中关闭ViewController?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37366763/

10-12 14:42