Swift中的viewWillLayoutSubviews

时间:2014-12-04 07:58:55

标签: swift

我正在尝试将SKScene * scene = [GameScene sceneWithSize:skView.bounds.size];翻译成swift,但我收到了错误

  

'sceneWithSize'不可用:使用对象构造'SKScene(size :)'。

我正在使用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)
    }
}

3 个答案:

答案 0 :(得分:4)

尝试更改

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

通过

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

希望这会有所帮助;)

答案 1 :(得分:0)

如错误所示,您尝试使用的功能不可用。您应该使用构造函数init(size size: CGSize)

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

另请注意,:SKScene不是必需的,因为类型在构造函数中是显而易见的。

如果您打开documentation,您会看到+sceneWithSize:不适用于Swift。

答案 2 :(得分:0)

当视图的边界发生变化时,视图会调整其子视图的位置。您的视图控制器可以覆盖此方法以在视图布局其子视图之前进行更改。此方法的默认实现不执行任何操作。