2016-06-26 16 views
0

IBOutletsのデータを取得できるように、別のUIViewControllerをロードしようとしています。私はSwiftとSprite-Kitを使用しています。私が話しているUIViewControllerGameViewControllerと呼ばれています。それは私のゲームで最初にロードされるものです。その後、私のGameSceneに行きます。ここで私はGameViewControllerをインスタンス化しようとしています。 iCarouselというライブラリを使用しているので、私はこれをやりたいと思います。私はそれをGameSceneから上に移動してアニメーションしたいと思います。ただし、iCarouselはUIViewControllerでのみ使用できます。そこでGameSceneで呼び出されるGameViewControllerの関数を呼び出したいと思います。この機能には、カルーセルの移動に使用されるNSLayoutConstraintがあります。私がこの関数を呼び出すときはいつでも、それはそのゼロであると言います。ここに私のコードの一部は次のとおりです。View Controllerがインスタンス化されないインスタンス化

GameScene内部:

let storyboard: UIStoryboard = UIStoryboard.init(name: "Main", bundle: nil) 
let firstViewController: GameViewController = storyboard.instantiateViewControllerWithIdentifier("Load-up") as! GameViewController 
firstViewController.start() 

GameViewController内側:

func start() { 
    // Constraint 
    top.constant = 100 
    UIView.animateWithDuration(2){ 
     self.view.layoutIfNeeded() 
    } 
} 

あなたは私を気軽に、より多くの情報が必要な場合。前もって感謝します!

答えて

3

これは、ビューコントローラがビュー階層をまだロードしていないためです。 viewControllerは、何かがviewメッセージを送信したときにのみビュー階層をロードします。システムは、view階層を画面に表示するときに、これを独自に実行します。そしてそれはprepareForSegue:sender:viewWillAppear:loadView()self.viewのようなコールの後に起こります。

はまだロードされていないので、まだnilです。

VCにself.viewに電話をかけ、プロパティ/アウトレットにアクセスするようにしてください。

編集:サンプルコードが追加されました。

let storyboard = UIStoryboard.init(name: "Main", bundle: nil) 
let firstViewController = storyboard.instantiateViewControllerWithIdentifier("Load-up") as! GameViewController 
debugPrint("Printing for the sake of initializing view of VC: \(firstViewController.view)") 
firstViewController.start() 
+0

返信ありがとうございます...私はあなたが何を意味するか本当に理解していません。私が提供したコードを使って何を意味するのかというコードの中で、簡単な例を教えてください。ありがとう –

+0

私の答えで編集してください、今試してください。 – Santosh

関連する問題