#swiftui #skscene #skview #spriteview
Вопрос:
Я надеюсь, что кто-нибудь сможет сказать мне, почему это происходит и как это исправить. В представлении содержимого SwiftUI я использую SpriteView() для представления SKScene.
struct ContentView: View {
@Environment(.presentationMode) var presentationMode
@EnvironmentObject var appData : AppData
@ObservedObject var viewModel = ViewModel()
var gameScene: SKScene {
let scene = GameScene(size: CGSize(width: UIScreen.main.bounds.width, height: UIScreen.main.bounds.height))
scene.viewModel = self.viewModel
scene.scaleMode = .aspectFill
return scene
}
var summaryScene: SKScene {
let scene = SummaryScene(size: CGSize(width: UIScreen.main.bounds.width, height: UIScreen.main.bounds.height))
scene.viewModel = self.viewModel
scene.scaleMode = .aspectFill
return scene
}
var body: some View {
ZStack{
GeometryReader { geometry in
SpriteView( scene: chooseScene(for: viewModel.complete))
.frame(width: geometry.size.width, height: geometry.size.height)
}
.edgesIgnoringSafeArea(.all)
VStack{
...
}
}
}
func chooseScene(for complete: Bool) -> {
complete ? summaryScene : gameScene
}
Соответствующий код в GameScene выглядит следующим образом:
class GameScene: SKScene {
...
override func didMove(to view: SKView) {
print("did move to view")
backgroundColor = UIColor(red: 30 / 255, green: 32 / 255, blue: 53 / 255, alpha: 1.0)
layoutScene()
startCounter()
}
Инструкция print сообщает мне, что didMove(для просмотра) вызывается дважды, и это приводит к очень короткой вспышке на экране. В остальном все идет нормально.
Есть ли очевидная проблема с тем, как я называю SKScene? Или мне следует искать причину в другом месте? Спасибо.