2014-12-04 17 views
6

我試着翻譯SKScene * scene = [GameScene sceneWithSize:skView.bounds.size];進入迅捷,但我得到的錯誤viewWillLayoutSubviews在斯威夫特

「sceneWithSize」是不可用:使用對象構造「SKScene(大小:)」。

我使用viewWillLayoutSubviews和切割出viewDidLoad(),因爲它沒有給出正確的尺寸爲我選擇設備的屏幕尺寸。這實際上讓我質疑爲什麼viewDidLoad()存在?

override func viewWillLayoutSubviews() { 
    super.viewWillLayoutSubviews(); 
    let skView = self.view as SKView; 
    if skView.scene != nil { 
     skView.showsFPS = true; 
     skView.showsNodeCount = true; 
     skView.showsPhysics = true; 
     // Create and configure the scene 

     let scene:SKScene = GameScene.sceneWithSize(skView.bounds.size); // ERROR MESSAGE! 
     // Objective-C code in next 2 lines 
     // SKScene * scene = [GameScene sceneWithSize:skView.bounds.size]; 
     // scene.scaleMode = SKSceneScaleModeAspectFill; 

     // Present Scene 
     skView.presentScene(scene) 
    } 
} 
+0

可能只是'let scene = SKScene(size:skView.bounds.size)' – Ian 2014-12-04 08:35:32

回答

0

如錯誤所述,您嘗試使用的功能不可用。你應該使用構造init(size size: CGSize)

let scene = SKScene(size: skView.bounds.size) 

還要注意:SKScene是沒有必要作爲類型爲構造明顯。

如果您打開documentation,您將看到+sceneWithSize:不適用於Swift。

+0

我註釋掉了viewDidLoad中除super.viewDidLoad()之外的所有行,並將viewWillLayoutSubviews()與您的建議放在一起,但現在我什麼都看不到在模擬器中。在Objective C中,我總是指定GameScene sceneWithSize,但我假設編譯器不知道,因爲我說let scene = SKScene(size:skView.bounds.size)並且沒有指示GameScene。只是一個假設。關於如何解決這個問題的任何想法? – baskInEminence 2014-12-04 18:39:05

4

嘗試改變

let scene:SKScene = GameScene.sceneWithSize(skView.bounds.size); 

通過

let scene:SKScene = GameScene(size: skView.bounds.size); 

希望這有助於;)

0

當一個視圖邊界的變化,認爲調整其子視圖的位置。您的視圖控制器可以覆蓋此方法以在視圖佈局其子視圖之前進行更改。此方法的默認實現不做任何事情。