UITabBarController
には2つのアイテムがあり、最初のものはちょうどUIWebView
のカレンダーです。 2番目のアイテムはSpriteKitのゲームシーンを持ち込み、タブバーを非表示にします(ゲームはフルスクリーンでなければなりません)。SKScriteNodeをボタンとして使用してGameSceneからUITabBarControllerに変換します
私はタップすると、私はカレンダービュー(最初のタブバーの項目)に戻って変更するビューをたいというSKSpriteNode
イメージを持っています。私はこれを行う方法を探し、ここでStackOverflowで見つかったさまざまな提案を試みましたが、何も動作していません。エラー
"Unexpectedly found nil while unwrapping an optional"
すると、アプリがクラッシュ私はちょうどなぜ私はそれを取得していない、そのエラーが何を意味するのか理解しています。
GameScene.swiftで:ここでは、関連するコード(これを理解しようとしたときに、私はここから取得した場所の一部)であるGameViewController.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)
}
}
}
:
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()
このクラッシュには関係しませんが、 'self.removeFromParent()'は効果がありません。 SKSceneはルートノードであるため、ノードツリーから削除することができます。 'view.presentScene()'が呼び出され、新しいシーンへの遷移が終了すると、古いシーンは新しいシーンに置き換えられます( 'view.scene'は上書きされます)。 – Whirlwind
ありがとう、私はこのサイトの他の同様の質問の1つからそれを得た。それがうまくいくと思ったので、私はそこに投げ込んだ。それが私の状況を助けるものではないことを知っていればよい。 –