簡體   English   中英

SKScene 中的轉場到 UIViewController

[英]Segue in SKScene to UIViewController

在我的 GameScene.swift 文件中,我試圖像這樣執行返回到我的菜單視圖控制器的轉場:

func returnToMainMenu(){
    var vc: UIViewController = UIViewController()
    vc = self.view!.window!.rootViewController!
    vc.performSegueWithIdentifier("menu", sender: vc)
}

此方法在節點被點擊時運行:

override func touchesEnded(touches: NSSet, withEvent event: UIEvent) {
    for touch: AnyObject in touches {
        let location = touch.locationInNode(self)
        if gameOn == false{
            if restartBack.containsPoint(location){
                self.restartGame()
            }
            else if menuBack.containsPoint(location){
                self.returnToMainMenu()
            }
            else if justBegin == true{
                self.restartGame()
            }
        }
    }
}

其中menuBack是返回菜單的按鈕。 每次運行此代碼時,都會拋出一個 NSException:

Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Receiver (<ProxyBlock.Menu: 0x165a3e90>) has no segue with identifier 'menu''

我檢查了我的 segue 標識符,它確實是“菜單”。

您正在調用根視圖控制器上的 segue。 我認為這就是問題所在。 您需要在場景的 viewController 上調用 segue(我假設您已經創建了 segue,因此在根 viewController 上找不到它)。

現在的問題是 SKScene 不能直接訪問它的 viewController,而只能訪問它所包含的視圖。 您需要手動創建指向它的指針。 這可以通過為 SKScene 創建一個屬性來完成:

class GameScene: SKScene {
    weak var viewController: UIViewController?
    ...
}

然后,在 viewController 類中,就在skView.presentScene(scene)之前

scene.viewController = self

現在,您可以直接訪問 viewController。 只需在這個 viewController 上調用 segue:

func returnToMainMenu(){
    viewController?.performSegueWithIdentifier("menu", sender: vc)
}

如何從 Scene 轉到 ViewController

Swift 3 -適用於 SpriteKit / UIKit

您可以使用NSNotification

例子:

1.) 在故事板中創建一個 segue 並將標識符命名為“segue”

2.) 在您要從中分離的 ViewController 中創建一個函數。

func goToDifferentView() {

    self.performSegue(withIdentifier: "segue", sender: self)

}

3.) 在您的 ViewController 的 ViewDidLoad() 中,您正在創建觀察者。

NotificationCenter.default.addObserver(self, selector: #selector(goToDifferentView), name: "segue" as NSNotification.Name, object: nil)

4.) 在您要轉場的 ViewController 或場景中,在您希望觸發轉場的任何位置添加 Post 方法。

NotificationCenter.default.post(name: "segue" as NSNotification.Name, object: nil)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM