Итак, у меня есть один UIViewController
и два SKScene
с. UIViewController
представляет две сцены, вращая устройство; landscape
загрузка SKScene
1 и portrait
загрузка SKScene
2 л ie это:
override func viewWillTransition(to size: CGSize, with coordinator: UIViewControllerTransitionCoordinator) {
print("TRIGGERED")
if UIDevice.current.orientation.isLandscape {
print("Landscape")
presentView(name: "GameScene")
} else {
print("Portrait")
presentView(name: "GameScene2")
}
super.viewWillTransition(to: size, with: coordinator)
}
func presentView(name: String) {
if let view = self.view as! SKView? {
if let scene = SKScene(fileNamed: name) {
scene.scaleMode = .aspectFill
view.presentScene(scene)
}
view.ignoresSiblingOrder = true
view.showsFPS = true
view.showsNodeCount = true
}
}
Это прекрасно работает. Моя дилемма, однако, заключается в том, что я хочу реализовать шаблон протокола делегата между двумя SKScenes GameScene
и GameScene2
. Проблема в том, что UIViewController
(self) из SKScene
1 должен быть передан как делегат в SKScene
2. Поэтому, если пользователь, например, щелкнет что-то в режиме landscape
(GameScene), som data String
передается GameScene2, когда ориентация меняется на portrait
.
Так в SkScene
1:
protocol MyProtocol {
func myProtocolFunc(someString: String)
}
class GameScene: SKScene{
var myDelegate: MyProtocol!
и в UIViewController
как мне установить делегата? scene.myDelegate
не работает. GameScene().myDelegate = GameScene2().self
работает, но так как view.presentScene(scene)
используется для представления неактуальной сцены. Как получить доступ и установить delegate
? Как настроить шаблон delegate-protocol
, чтобы получить желаемый результат?