【发布时间】:2020-05-03 06:41:23
【问题描述】:
所以我有一个UIViewController 和两个SKScenes。 UIViewController通过旋转设备呈现两个场景; landscape load SKScene 1 和 portrait load 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 GameScene 和 GameScene2 之间实现一个委托协议模式。问题是SKScene 1 的UIViewController (self) 应该作为代理传递给SKScene 2。因此,例如,如果用户在landscape 模式(GameScene)中单击某些东西,则某些数据@987654335当方向更改为portrait 时,@ 被传递给 GameScene2。
所以在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 模式以获得所需的结果?
【问题讨论】:
标签: swift sprite-kit delegates protocols