2017-07-07 6 views
0

SpriteKitで小さなゲームを作っています。ここでは、ユーザーが自分のゲームをプレイするのが初めてであるかどうかをチェックします。そうであれば、私は彼のキャラクター名を入力する別のviewcontrollerに彼をリダイレクトするアプリをしたい。ボタンをクリックせずにスウィフトを実行する

しかし、私のアプリにそうするのが苦労しています。

override func viewDidLoad() { 
    super.viewDidLoad() 

    checkGame() 

    if let view = self.view as! SKView? { 

     // Load the SKScene from 'GameScene.sks' 
     if let scene = SKScene(fileNamed: "GameScene") { 
      // Set the scale mode to scale to fit the window 
      scene.scaleMode = .aspectFill 

      // Present the scene 
      view.presentScene(scene) 
     } 

     view.ignoresSiblingOrder = true 

     view.showsFPS = true 
     view.showsNodeCount = true 
    } 
} 

func checkGame() { 
    //Check game 
    let firstPlay:Bool = appData.bool(forKey: "\(GameData.firstPlay)") 
    print(firstPlay) 

    if firstPlay == false { 
     print("Heading for setup") 
     self.performSegue(withIdentifier: "GoToSetup", sender: nil) 
    } 
} 

しかし、 "セットアップのViewControllerは" ロードされていません。私の "GameViewController.swift" で

私はこのコードを持っています。私はボタンをクリックしてセグをトリックすることができますが、それは私が望むものではありません。私は、ビューが読み込まれるとすぐにそれが起こるようにしたい。

アイデア?

答えて

1

あなたがプログラムで、次のとセグエを呼び出すことができます。

self.performSegueWithIdentifier("segueId", sender: self); 
1

私は、あなたが「セットアップのViewController」によって意味することは、「ロードされていないかわからないが、通常我々がseguesを実行しませんviewDidLoadこのとき、ビューは単にメモリにロードされていて、まだ登場していないこの時点でセグエを行うことは行うには奇妙なものの一種である

私はviewDidAppear()でセグエを実行することをお勧めいたします:。。。

override func viewDidAppear(animated: Bool) { 
    super.viewDidAppear(animated: animated) 
    performSegue(withIdentifier: "GoToSetup", sender: nil) 
} 
0

viewDidLoadステージでは、ビューがまだビュー階層にないので、UIViewControllerはUIインタラクションとperformSegue toを実行できません。これはviewDidAppear(animated:Bool)で行うことができます。

+0

これはSweeperの回答に何が追加されますか?それは、追加の情報を提供していないので、実際には既存の回答に対する「同意する」コメントです。 –

関連する問題