如何以编程方式为 OSX 上的 SpriteKit/GameScene 应用程序设置窗口大小和位置

Sag*_*ual 5 macos sprite-kit swift

我在 Xcode 中创建了一个简单的项目作为 SpriteKit/GameScene 应用程序。我想以编程方式设置窗口大小。我在这里阅读了很多答案,并在其他地方阅读了一些教程,但我读过的内容都没有帮助。

这个答案讨论了重写WindowController.windowDidLoad,但 GameScene 没有给我一个WindowController. 它确实给了我一个ViewController. 本教程说您可以self.view.window?.setFrame()从调用ViewController.viewDidLoad(),但我的窗口顽固地保持相同的大小。我在 SO 上找到的许多答案都谈到了自动布局。我没有什么可布置的。这只是一个 SpriteKit 入门项目。

这个答案说你可以设置preferredContentSizein ViewController.viewWillAppear(),这实际上让我设置窗口大小,但如果我让窗口太大(因为我必须猜测合法的大小),它就不可拖动或调整大小。这个答案说你可以从 获得正确的尺寸view.bounds.size,但它说 800 x 600,这与我的屏幕尺寸相差甚远。这个答案说你可以从 获取边界UIScreen.mainScreen().bounds.size,但我的 GameScene/SpriteKit 启动项目似乎没有任何类型UIScreen

如何获取屏幕尺寸,以及如何以编程方式设置窗口尺寸和位置?

另外,我似乎找不到更多的其他答案之一说你应该删除GameScene.sks,我就是这样做的,除了大小之外,一切看起来都还不错。

Sag*_*ual 3

如果一些 UI 专家能够评论这是否是“正确”的答案,那就太棒了,但这是我根据“El Tomato”相当神秘的评论所做的疯狂猜测。首先,将以下内容添加到 ViewController.swift:

class WildGuessWindowController: NSWindowController {
    override func windowDidLoad() {
        if let screenSize = window?.screen?.frame {
            window!.setFrame(screenSize, display: true)
            print(screenSize)
        }

        super.windowDidLoad()
    }
}
Run Code Online (Sandbox Code Playgroud)

接下来,在项目导航器中打开 Main.storyboard。您可能会看到类似以下内容: 在此输入图像描述

单击“窗口控制器”框,然后打开右侧面板。你应该看到这样的东西。

在此输入图像描述

请注意箭头旁边的框,其中有一个灰色的类名称。(另请注意,您可能必须单击“身份检查器”按钮,即上面的蓝色按钮,上面写着“自定义类”。)现在单击该下拉列表,您应该会看到WildGuessWindowController. 选择它,然后就完成了。构建并运行。该框架将实例化您的类,并运行windowDidLoad().