GameScene.swiftからViewControllerのdissmissViewControllerAnimatedを呼ぶ

はまりながらもstackoverflowの記事に当たり、何とか解決

やりたい事

  • GameScene.swiftでUIButton生成
  • ButtonタップでViewControllerのdissmissViewControllerAnimatedを呼ぶ

参考リンク

ios - How to call method from ViewController in GameScene - Stack Overflow

対応内容

  • GameSceneにviewControllerプロパティを作成
class GameScene : SKScene, SKPhysicsContactDelegate {
    var viewController: ViewController!
  • ViewControllerではGameScene作成時にself(ViewController)を代入
// シーン作成
let scene = GameScene()
scene.viewController = self
  • これでGameScene内でButtonのaddTargetでタップされた時に呼ぶ事が出来る
// ボタンを生成
let homeIcon = UIButton(frame: CGRectMake(50, 400, 200, 50))
homeIcon.setImage(UIImage(named: "home"), forState: .Normal)
homeIcon.addTarget(self, action: "backToMenu:", forControlEvents: .TouchUpInside)
self.view!.addSubview(homeIcon)

func backToMenu (sender: UIButton) {
    self.viewController.dismissViewControllerAnimated(true, completion: nil)
}