swift - 使用 SKSpriteNode 作为按钮从 GameScene 过渡到 UITabBarController

标签 swift sprite-kit uitabbarcontroller segue

我有一个 UITabBarController,它有两个项目,第一个是日历,它只是一个 UIWebView。第二项引入一个SpriteKit游戏场景,隐藏标签栏(游戏需要全屏)。

我有一个 SKSpriteNode 图像,当点击它时,我希望 View 变回日历 View (第一个标签栏项目)。我已经搜索了一种方法来执行此操作,并尝试了我在 StackOverflow 上找到的各种建议,但没有任何效果。应用程序因错误而崩溃

"Unexpectedly found nil while unwrapping an optional"

我明白该错误的含义,只是不明白我为什么会收到它。这是相关代码(其中一部分是我在尝试解决这个问题时从这里获得的):

在 GameScene.swift 中:

weak var viewController: GameViewController!

override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {
    let touch:UITouch = touches.first! as UITouch
    let positionInScene = touch.locationInNode(self)
    let touchedNode = self.nodeAtPoint(positionInScene)

    if let name = touchedNode.name {
        if name == "exit" {
            self.viewController.gameOver()
            self.removeFromParent()
            self.view?.presentScene(nil)
        }
    }
}

在 GameViewController.swift 中:

var currentGame: GameScene!

override func viewDidLoad() {
    super.viewDidLoad()
    self.tabBarController?.tabBar.hidden = true
    if let scene = GameScene(fileNamed:"GameScene") {
        // Configure the view.
        let skView = self.view as! SKView
        skView.showsFPS = false
        skView.showsNodeCount = false

        skView.ignoresSiblingOrder = true

        scene.scaleMode = .AspectFill

        scene.viewController = self
        skView.presentScene(scene)
        currentGame = scene
    }
}

func gameOver() {
    performSegueWithIdentifier("backToMain", sender: nil)
}

这是给出错误的行:

self.viewController.gameOver()

最佳答案

你的代码是正确的;我认为可能的问题是您在不传输 viewController 的值的情况下呈现多个场景。要追踪此问题,请使用查找导航器 (Cmd+3) 搜索 presentScene,然后确保每次调用都是您已传输 viewController 的值之后 属性跨越到新场景。

关于swift - 使用 SKSpriteNode 作为按钮从 GameScene 过渡到 UITabBarController,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39057230/

相关文章:

iphone - 选项卡栏不显示任何项目

iphone - UITabBarController - 模拟双击 UITabBarItem

swift - 用 SpriteKit 在矩形上画一个洞?

xcode - 无法将 View Controller 的框架添加到另一个 View Controller 中的 ScrollView

multithreading - swift - 使用 enumerateChildNodesWithName 的多线程错误

ios - 如何在某些条件为真时重复操作?

ios - 如何以编程方式从位于导航 Controller 内部的 View Controller 移动选项卡栏?

arrays - View Controller 不显示来自 TableViewController 的数据

swift - 在导航 Controller 中使用协议(protocol)委托(delegate)移动数据

ios - 手动在 SKS 文件中创建的标签节点未加载