Pergunta

Eu tenho um multi aplicativo vista com UIViewControllers e XIBs individuais. Eu tenho uma visão de que é a visão de jogo e cada vez que eu chamá-lo eu quero que reinicializar, por que eu reiniciar média de sua condição inicial e não no estado I passado deixou-o em.

Aqui está o bloco de código que estou usando para vistas de carga e retire:

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

}

Eu deveria ser mais claro aqui. Eu tenho um UIViewController e um xib que compõem a vista enquanto o jogo está sendo jogado. Eles chamar um método em um UIView para desenhar programaticamente a vista. Deixo o UIViewController, quando o jogo termina e eu ir para uma tela de pontuação. Quero ter o reinício do usuário e voltar para o jogo, IE carregar o UIViewController com o código acima, mas começar com um novo jogo, todas as configurações estão no método chamado. Eu poderia apenas definir uma variável e passá-lo entre UIViewControllers mas eu embora possa haver um comando que permita-me para repor o UIViewController jogo para que ele não se lembra de nada sobre o estado no final do último jogo.

Para fazer o trabalho que eu escrevi um método para repor todas as variáveis ??no UIView que chama a tela do jogo e chamar esse método do UIViewController na seção viewDidLoad.

Foi útil?

Solução

Eu assumo a sua visão está exibindo alguns dados armazenados no modelo (estado do jogo). Então, você não deseja redefinir o estado do jogo e deixar a vista exibi-lo? A vista é gerido (carregado / liberada / recarregado) pelo sistema quando ele precisa ser exibida ou liberado quando a memória no telefone é baixa. Então, se você lidar com o seu estado de jogo separadamente, você deve atualizar o estado do jogo (o modelo) e deixe a exibição exibi-lo.

O que quer dizer o meu "chamando a visão"? Você quer dizer quando você vai de um 'menu' de 'uma tela de jogo'?

Talvez re-carregar o estado do jogo após a exibição é exibida ajudaria. Existem alguns delegados como viewDidLoad , mas o meu entendimento é que eles estão sendo chamados após a exibição é carregado. No entanto, se você está ficando sem memória a sua visão pode ser liberação e recarregado mais tarde, então eu acho que você deve gerenciar o jogo 'estado'-se no modelo de objeto e deixe a vista apenas exibi-lo.

Não tenho certeza se isso ajuda, eu não tenho certeza que você quis dizer o meu 'chamando a vista'.

Outras dicas

Em vez de manter o controle de qual ponto de vista é atualmente exibida, utilize um UINavigationController. Isso é o que eles são para. Em applicationDidFinishLaunching em seu delegado app:

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

Criar uma variável de instância em startViewController e passá-lo um ponteiro para o controlador de navegação depois de criá-lo. Então, quando você quer ir para o jogo:

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

ou não animado, qualquer coisa. Você também provavelmente vai querer esconder a barra de navegação com:

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

Quando o jogo termina, você pode continuar a empurrar tudo o que vê você quer, e você sempre pode voltar à primeira vista com:

[self.navigationController popToRootViewControllerAnimated:YES];

Oh, e como para re-inicializar a cada vez que jogo que você jogar, basta implementar

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

no controlador visão de jogo e fazer o que a inicialização que você deseja. Embora honestamente, eu não estou 100% certo que você deve usá-la com um .xib ... Eu raramente usar Interface Builder para que eu não tenho certeza. Mas eu acho que ele iria trabalhar.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top