Как использовать тот же экземпляр в шаблоне протокола делегата? - PullRequest
0 голосов
/ 17 января 2020

Я недавно задал вопрос о том, как использовать шаблон protocol delegate здесь: Как использовать шаблон протокола делегирования с SpriteKit?

И пока я получил ответ, который дал мне долгий путь, я не понимаю, как все работает, и я думаю, что это связано с тем фактом, что я не (и не могу думать) использовать один и тот же экземпляр при изменении SKView с. Позвольте мне объяснить.

У меня есть один UIViewController и два SKScenes. UIViewController представляет два scenes, вращая устройство; landscape load SKScene 1 и книжная загрузка SKScene 2, например:

  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
          }
    }

и в SKScene 1:

protocol MyProtocol {
    func myProtocolFunc(someString: String)
}

class GameScene: SKScene{

    var myDelegate: MyProtocol!

и в SKScene 2:

class GameScene2: MyProtocol {
    private var label: SKLabelNode?

    func myProtocolFunc(someString: String) {
        label = SKLabelNode(fontNamed: "Chalkduster")
        label!.text = someString
        label!.position = CGPoint(x: 0, y: 0)
        addChild(label!)
    }

Однако SKlabel не обновляется со значением delegate. Как я уже сказал, я думаю, это потому, что я создаю новый экземпляр scene при загрузке SKScene 2. И этот экземпляр не имеет delegate. Я не уверен, как обойти это, хотя мне нужно иметь новый экземпляр SKScene для загрузки другой сцены.

1 Ответ

0 голосов
/ 17 января 2020

Возможно, вам стоит прочитать шаблон координат https://www.hackingwithswift.com/articles/71/how-to-use-the-coordinator-pattern-in-ios-apps

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...