¿Cómo despedir a SKScene?

Cuando termine con mi SKScene ¿hay alguna manera de descartar el SKScene de mi class SKScene?

Si no vuelvo en mi Viewcontroller donde presento mi SKScene [skView presentScene:theScene]; ¿Hay alguna forma de reiniciar la escena o eliminarla de mi SKView?

La reference de class SKScene y la reference de class SKView no son de ayuda.

Actualizar:

El siguiente código elimina mi escena de mi SKView [yourSKView presentScene:nil]; pero cuando estoy de vuelta en mi controller de vista, la escena sigue ejecutándose en segundo plano. Siempre puedo hacer una pausa cuando termina el juego y me devuelven a mi controller de visualización (menu), pero me pregunto ¿hay otro método distinto al que se detiene como eliminarlo por completo?

 -(void)endTheGame { [highscoreLabel removeFromSuperview]; NSLog(@"Game Over"); //would like to end here before calling the below method in my view controller [self.delegate mySceneDidFinish:self]; } 

Puedes usar:

  [yourSKView presentScene:nil]; 

para eliminar la escena

Después de haber conocido un problema similar, tropecé con tu pregunta, y dado que nadie dio una respuesta decente aquí es cómo lo resolví:

  1. en mi escena llamé a ambas líneas
 [self removeFromParent]; [self.view presentScene:nil]; 
  1. en mi controller (el controller que muestra el SKScene) cambié el código de plantilla de Apple, que estaba creando y presentando mi escena desde viewDidLoad para crear y presentar mi escena en viewWillAppear, solo si la escena de la vista es nula

aquí está mi código Swift, incluso si estás usando el Objetivo C entenderás lo que hace; La línea de key es la testing "if skView.scene == nil":

 override func viewWillAppear(animated: Bool) { super.viewWillAppear(animated) let skView = self.view as SKView if skView.scene == nil { let scene = GameScene(size:skView.bounds.size) scene.controller = self skView.ignoresSiblingOrder = true scene.scaleMode = .AspectFill skView.presentScene(scene) } } 

"No puede ir" Volver al controller de vista "desde una escena. La escena es una vista, el controller de vista controla y muestra vistas. Utilice el controller de vista para cambiar las vistas. Recuerde que el controller de vista en sí no es una vista". -Warbio

La mejor solución aquí es crear otro controller de vista. Este controller de vista será mi menu. A continuación, el otro controller de vista actuará como un host para el skscene.

En mi situación, utilizo mi menu viewcontroller para descartar el viewcontroller que se muestra en el skview.

Desde su SKScene , puede simplemente hacer [self.view presentScene:aNewScene] para presentar otra escena

Elimino escenas por completo usando este bloque en mi controller de vista: Obviamente, necesitarás declarar tu Tamaño y "newSKview"

 SKView * skView = (SKView *)self.view; SKScene *newScene = [[newSKView alloc]initWithSize:size]; newScene.scaleMode = SKSceneScaleModeAspectFill; SKScene *oldScene=(skView.scene); [oldScene removeFromParent]; [skView presentScene:newScene]; 

Esto funciona bien para mi. Ninguna de mis escenas son retenidas o fuertes.

Tal vez mi variante sea útil:

 [[self.scene childNodeWithName:@"YourChildNodeName"] removeFromParent];