es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Mover de una escena de SpriteKit a una vista de SwiftUI

Intento descubrir la forma correcta de regresar a una vista de SwiftUI desde una escena de SpriteKit. Actualmente tengo un “menú principal” en Swift UI que se ve de la siguiente manera.

struct MainMenu: View {
    var body: some View {
        NavigationView {
            VStack {
                Text("Replicator")
                    .font(.largeTitle)
                    .fontWeight(.bold)
                    .padding()

                NavigationLink(destination: ContentView().navigationBarBackButtonHidden(true)) {
                    HStack {
                        Image(systemName: "play.circle")
                            .font(.title3)

                        Text("Start")
                            .font(.title)
                    }
                    .frame(width: 250, height: 50)
                    .background(.cyan)
                    .cornerRadius(25)
                    .foregroundColor(.white)
                }
            }
        }
    }
}

ContentView() es lo que contiene el juego de SpriteKit y se ve de la siguiente manera.

struct ContentView: View {
    var scene: SKScene {

        let scene = Level_1()
        scene.size = CGSize(width: 750, height: 1334)
        scene.scaleMode = .aspectFit
        return scene

    }

    var body: some View {
        VStack {
            SpriteView(scene: scene)
                .ignoresSafeArea()
        }
    }
}

Mi pregunta es… ¿cómo regreso a “Menú principal” una vez que estoy en ContentView?

Gracias por cualquier ayuda que puedas proporcionar.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para regresar al Menú Principal desde ContentView en SwiftUI, puedes utilizar NavigationLink y pasar la vista MainMenu como destino. Primero, necesitas agregar una barra de navegación a ContentView y luego crear un nuevo NavigationLink con MainMenu como destino.

    Así es como puedes modificar ContentView para agregar una barra de navegación y un NavigationLink:

    struct ContentView: View {
        @Environment(\.presentationMode) var presentationMode
    
        var scene: SKScene {
            let scene = Level_1()
            scene.size = CGSize(width: 750, height: 1334)
            scene.scaleMode = .aspectFit
            return scene
        }
    
        var body: some View {
            NavigationView {
                VStack {
                    SpriteView(scene: scene)
                        .ignoresSafeArea()
    
                    Button("Volver al Menú Principal") {
                        presentationMode.wrappedValue.dismiss()
                    }
                }
                .navigationBarTitle("")
                .navigationBarHidden(true)
            }
        }
    }
    

    Cuando se pulsa el botón “Volver al Menú Principal”, se descarta la vista y se vuelve a la vista anterior, que es el Menú Principal.

    Ten en cuenta que necesitas utilizar la propiedad presentationMode para descartar la vista en lugar de añadir un nuevo NavigationLink. La razón de esto es que NavigationLink crea una nueva pila de vistas, lo que significa que acabarías con múltiples instancias de la vista MainMenu si lo utilizas para volver atrás.

Comments are closed.