Как программно установить размер и положение окна для приложения SpriteKit / GameScene в OSX - PullRequest
0 голосов
/ 07 ноября 2018

У меня есть голый проект, созданный в Xcode как приложение SpriteKit / GameScene. Я хочу установить размер окна программно. Я прочитал много ответов здесь и несколько учебных пособий в других местах, но ничего из того, что я прочитал, не помогло.

Этот ответ говорит о переопределении WindowController.windowDidLoad, но GameScene не дает мне WindowController. Это дает мне ViewController. Этот учебник говорит, что вы можете позвонить self.view.window?.setFrame() из ViewController.viewDidLoad(), но мое окно упорно остается тем же размером. Ряд ответов, которые я нашел на SO, говорят об автоматическом макете. Мне нечего выкладывать. Это просто стартовый проект SpriteKit.

В этом ответе говорится, что вы можете установить preferredContentSize в ViewController.viewWillAppear(), и это действительно позволяет мне установить размер окна, но если я сделаю окно слишком большим (потому что мне нужно было угадать допустимый размер), он не перетаскивается и не изменяется. В этом ответе говорится, что вы можете получить правильный размер из view.bounds.size, но там написано 800 x 600, что далеко не соответствует размеру моего экрана. В этом ответе говорится, что вы можете получить границы от UIScreen.mainScreen().bounds.size, но мой стартовый проект GameScene / SpriteKit, похоже, не содержит каких-либо UIScreen

.

Как узнать размер экрана и как программно установить размер и положение окна?

Кроме того, в одном из других ответов, которые я, похоже, больше не могу найти, говорится, что вы должны удалить GameScene.sks, что я и сделал, и все выглядит нормально, за исключением размера.

1 Ответ

0 голосов
/ 07 ноября 2018

Было бы замечательно, если бы какой-нибудь гуру пользовательского интерфейса мог прокомментировать, является ли это «правильным» ответом, но вот что я сделал как дикое предположение, основанное на довольно загадочных комментариях «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()
    }
}

Далее откройте Main.storyboard в навигаторе проекта. Вы можете увидеть что-то вроде следующего: enter image description here

Нажмите на поле с надписью «Window Controller» и откройте правую боковую панель. Вы должны увидеть что-то вроде этого.

enter image description here

Обратите внимание на прямоугольник рядом со стрелкой, в котором указано затененное имя класса. (Также обратите внимание, что вам, возможно, придется нажать кнопку «Инспектор идентификации», синюю над которой там написано «Пользовательский класс».) Теперь нажмите на это раскрывающееся меню, и вы должны увидеть WildGuessWindowController. Выберите это, и все готово. Сборка и запуск. Фреймворк создаст экземпляр вашего класса и запустит windowDidLoad().

...