我正在尝试使用XCode的SpriteKit示例应用程序,我正在将其更改为测试和学习。
我想在GameScene(SKScene子类)中找到一个检测设备旋转的函数,即当设备从纵向旋转到横向等时,该函数应该触发。
我找到了一个功能
override func didRotate(from fromInterfaceOrientation: UIInterfaceOrientation)
但此函数仅适用于GameViewController(UIViewController子类)。我需要SKScene子类中存在的类似函数。
非常感谢。
答案 0 :(得分:1)
自iOS 8.0以来,didRotate(from:)已被弃用,因此我们将使用新方法。
每次轮换发生时,您都需要告诉'GameViewController通知当前场景。
让我们定义一个协议来说明符合类型(我们的场景)可以接收旋转事件
protocol CanReceiveTransitionEvents {
func viewWillTransition(to size: CGSize)
}
现在让我们将自己的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
}
}
如果您有多个场景,请重复每个场景。
最后让控制器在每次检测到旋转时调用相关的场景方法
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)
}
就是这样。