【问题标题】:viewWillLayoutSubviews in SwiftSwift 中的 viewWillLayoutSubviews
【发布时间】:2014-12-04 07:58:55
【问题描述】:

我正在尝试将 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)
    }
}

【问题讨论】:

  • 也许只是let scene = SKScene(size: skView.bounds.size)

标签: swift


【解决方案1】:

尝试改变

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

通过

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

希望这会有所帮助;)

【讨论】:

    【解决方案2】:

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

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

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

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

    【讨论】:

    • 我注释掉了 viewDidLoad 中除 super.viewDidLoad() 之外的所有行,并在 viewWillLayoutSubviews() 中加入了您的建议,但现在我在模拟器中什么也看不到。在 Objective C 中,我总是指定 GameScene sceneWithSize 但我假设编译器不知道,因为我说 let scene = SKScene(size: skView.bounds.size) 并且没有 GameScene 的指示。只是一个假设。关于如何解决此问题的任何想法?
    【解决方案3】:

    当视图的边界发生变化时,视图会调整其子视图的位置。您的视图控制器可以覆盖此方法以在视图布置其子视图之前进行更改。这个方法的默认实现什么都不做。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-09-07
      • 1970-01-01
      • 2023-03-18
      • 2014-06-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多