Frage

Ich habe eine Multi View-Anwendung mit einzelnen UIViewControllers und xibs. Ich habe eine Ansicht, die die Spielansicht ist und jedes Mal, wenn ich es so nennen will ich es erneut initialisieren, damit ich neu starte meine es Anfangszustand ist und nicht in dem Zustand, den ich es zuletzt in der links.

Hier ist der Code-Block I laden bin mit und entfernen Ansichten:

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

}

soll ich hier klarer sein. Ich habe eine UIViewController und eine xib, die die Ansicht bilden, während das Spiel gespielt wird. Sie nennen ein Verfahren in einem UIView programmatisch die Ansicht zu ziehen. Ich verlasse die UIViewController, wenn das Spiel endet, und ich gehe zu einem Score-Bildschirm. Ich mag den Benutzer Neustart haben und wieder in das Spiel gehen, laden IE die UIViewController mit dem obigen Code, sondern beginnen mit einem neuen Spiel, alle Einstellungen sind in der Methode aufgerufen. Ich konnte nur eine Variable gesetzt und es zwischen UIViewControllers passieren, aber ich dachte, es könnte ein Befehl sein, die mir erlauben würde, das Spiel UIViewController zurückgesetzt werden, damit es nicht etwas über den Zustand am Ende des letzten Spiels erinnern.

Um es mir eine Methode funktioniert schrieb alle Variablen in der UIView zurückgesetzt, die das Spiel Bildschirm zieht und rufen Sie diese Methode aus den UIViewController im viewDidLoad Abschnitt.

War es hilfreich?

Lösung

Ich gehe davon aus Ihrer Sicht einige Daten in Modell (Spielzustand) gespeichert ist, angezeigt wird. Also würden Sie nicht wollen, das Spiel Zustand zurückgesetzt werden und lassen Sie die Ansicht es angezeigt werden? Die Ansicht wird verwaltet (geladen / freigegeben / Reloaded) durch das System, wenn es benötigt angezeigt oder freigegeben werden, wenn der Speicher am Telefon niedrig ist. Also, wenn Sie Ihr Spiel Zustand Griff separat sollten Sie das Spiel Zustand aktualisieren (das Modell) und lassen Sie die Ansicht es angezeigt werden soll.

Was meinst du meine „die Ansicht calling“? Meinen Sie, wenn Sie von einem ‚Menü‘ auf ‚einen Spielschirm‘ gehen?

Vielleicht erneut Laden des Spiels Zustand nach der Ansicht angezeigt wird helfen würde. Es gibt einige Delegierten wie viewDidLoad , aber mein Verständnis ist, dass sie nach der Ansicht geladen wird aufgerufen werden. Wenn Sie jedoch nicht genügend Arbeitsspeicher laufen Ihre Ansicht freigeben und später wieder geladen werden kann, so denke ich, sollten Sie das Spiel ‚Staat‘ selbst in Modellobjekt verwalten und lassen Sie die Ansicht es gerade angezeigt wird.

Nicht sicher ob das hilft, ich bin nicht ganz sicher, was Sie meinten meine ‚die Ansicht Aufruf‘.

Andere Tipps

Statt Spur zu halten, von denen Ansicht gerade angezeigt wird, verwenden Sie einen UINavigationController. Das ist, was sie sind für. In applicationDidFinishLaunching in AppDelegate:

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

Erstellen Sie eine Instanz-Variable in startViewController und einen Zeiger auf die Navigationssteuerung übergeben, nachdem Sie es erstellen. Dann, wenn Sie auf das Spiel gehen wollen:

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

oder nicht animiert, was auch immer. Sie wollen wahrscheinlich auch die Navigationsleiste verstecken mit:

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

Wenn das Spiel beendet ist, können Sie pushen, was Ansichten, die Sie wollen, und Sie können immer auf den ersten Blick zurück mit:

[self.navigationController popToRootViewControllerAnimated:YES];

Oh, und wie neu initialisiert das Spiel jedes Mal wenn Sie spielen, nur implementieren

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

im Spiel-View-Controller und tun, was Initialisierung Sie wollen. Obwohl ehrlich bin ich nicht 100% sicher, dass mit einem .xib verwenden sollte ... Ich verwende selten Interface Builder so bin ich nicht sicher. Aber ich denke, dass es funktionieren würde.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top