Question

J'ai une application multi-vues avec UIViewControllers et xibs individuels. J'ai une vue qui est la vue du jeu et chaque fois que je l'appelle, je souhaite la réinitialiser. J'entends par là le redémarrage dans ses conditions initiales et non dans l'état dans lequel je l'avais laissé.

Voici le bloc de code que j'utilise pour charger et supprimer des vues:

-(void)loadStartViewController {
[currentView.view removeFromSuperview];
StartViewController *startViewController = [[StartViewController alloc] initWithNibName:@"StartView" bundle:nil];
[window addSubview:startViewController.view];
currentView = startViewController;

}

Je devrais être plus clair ici. J'ai un UIViewController et un xib qui composent la vue pendant le jeu. Ils appellent une méthode dans UIView pour dessiner la vue par programme. Je quitte UIViewController à la fin du jeu et je passe à un écran de partition. Je veux que l'utilisateur redémarre et revienne dans le jeu, IE charge le code ci-dessus avec UIViewController, mais commence avec un nouveau jeu. Tous les paramètres sont définis dans la méthode. Je pourrais juste définir une variable et la passer entre UIViewControllers mais je pensais qu'il pourrait y avoir une commande qui me permettrait de réinitialiser le jeu UIViewController afin qu'il ne se souvienne de rien de l'état à la fin du dernier match.

Pour que cela fonctionne, j'ai écrit une méthode pour réinitialiser toutes les variables de UIView qui dessine l'écran de jeu et appeler cette méthode à partir de UIViewController dans la section viewDidLoad.

Était-ce utile?

La solution

Je suppose que votre vue affiche des données stockées dans le modèle (état du jeu). Donc, ne voulez-vous pas réinitialiser l'état du jeu et laisser la vue l'afficher? La vue est gérée (chargée / libérée / rechargée) par le système lorsque celle-ci doit être affichée ou libérée lorsque la mémoire du téléphone est faible. Par conséquent, si vous gérez votre état de jeu séparément, vous devez le mettre à jour (modèle) et laisser la vue l’afficher.

Que voulez-vous dire par mon "appel de la vue"? Voulez-vous dire quand vous passez d'un "menu" à "un écran de jeu"?

Peut-être que recharger l'état du jeu après l'affichage de la vue pourrait aider. Certains délégués, tels que viewDidLoad , ont été appelés, mais je pense qu'ils sont appelés une fois la vue chargée. Cependant, si vous manquez de mémoire, la vue peut être libérée et rechargée plus tard. Par conséquent, vous devriez gérer vous-même l'état du jeu dans l'objet modèle et laisser la vue l'afficher.

Je ne suis pas sûr que cela aide, je ne suis pas tout à fait sûr de ce que vous vouliez dire par "appeler la vue".

Autres conseils

Au lieu de garder trace de la vue actuellement affichée, utilisez un contrôleur UINavigationController. C'est pour ça qu'ils sont. Dans applicationDidFinishLancement dans le délégué de votre application:

UINavigationController *navigationController = [[UINavigationController alloc] initWithRootViewController:startViewController];

Créez une variable d'instance dans startViewController et transmettez-lui un pointeur au contrôleur de navigation après l'avoir créée. Ensuite, quand vous voulez aller au jeu:

[self.navigationController pushViewController:gameViewController animated:YES];

ou non animé, peu importe. Vous voudrez probablement aussi masquer la barre de navigation avec:

[self.navigationController setNavigationBarHidden:YES animated:NO];

Lorsque le jeu se termine, vous pouvez continuer à afficher les vues souhaitées et vous pouvez toujours revenir à la première vue avec:

[self.navigationController popToRootViewControllerAnimated:YES];

Oh, et pour ré-initialiser le jeu à chaque fois que vous jouez, implémentez simplement

-(void)viewWillAppear:(BOOL)animated{}

dans le contrôleur de vue du jeu et effectuez l’initialisation de votre choix. Honnêtement, je ne suis pas sûr à 100% que vous devriez utiliser cela avec un fichier .xib ... J'utilise rarement Interface Builder, donc je ne suis pas sûr. Mais je pense que cela fonctionnerait.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top