как обнаружить поворот устройства из SKscene - PullRequest
0 голосов
/ 25 апреля 2018

Я просто пробую пример приложения XCode SpriteKit и меняю его для тестирования и обучения по ходу процесса.

Я хочу найти функцию, которая обнаруживает поворот устройства в GameScene (подкласс SKScene), то есть эта функция должна срабатывать при повороте устройства из портретного в альбомный и т. Д.

Я нашел функцию

override func didRotate(from fromInterfaceOrientation: UIInterfaceOrientation)

но эта функция работает только в GameViewController (подкласс UIViewController). Мне нужна похожая функция, которая существует в подклассах SKScene.

Большое спасибо.

1 Ответ

0 голосов
/ 26 апреля 2018

didRotate (from:) устарело с iOS 8.0, поэтому мы собираемся использовать новый метод.

Вам нужно будет сообщить вашему ´GameViewControllerинформировать текущую сцену каждый раз, когда происходит поворот.

1.Протокол CanReceiveTransitionEvents

Давайте определим протокол, чтобы сказать, что тип соответствия (наша сцена) может получать события вращения

protocol CanReceiveTransitionEvents {
    func viewWillTransition(to size: CGSize)
}

2.Соответствие нашей сцены CanReceiveRotationEvents

Теперь давайте приведем нашу собственную SKScene в соответствие с протоколом

class GameScene: SKScene, CanReceiveTransitionEvents {

    func viewWillTransition(to size: CGSize) {
        // this method will be called when a change in screen size occurs
        // so add here your code
    }
}

Если у вас есть несколько сцен, просто повторите для каждой из них.

3.ViewController должен информировать сцену о каждом повороте

Наконец, давайте заставим контроллер вызывать связанный метод сцены каждый раз, когда обнаруживается вращение

    override func viewWillTransition(to size: CGSize, with coordinator: UIViewControllerTransitionCoordinator) {

    super.viewWillTransition(to: size, with: coordinator)

    guard
        let skView = self.view as? SKView,
        let canReceiveRotationEvents = skView.scene as? CanReceiveTransitionEvents else { return }

    canReceiveRotationEvents.viewWillTransition(to: size)
}

Вот и все.

...