Pergunta

Eu tenho 2 GUIs e 2 controladores 1 é chamado de paisagista e o segundo é chamado Highguicontroller.

Agora, geralmente eu chamo de HighGuicontroller e, quando eu giro meu iPhone, ele detecta isso e depois mostra o paisagista: Código: Código:

    landscapeguicontroller *neu =[[landscapeguicontroller alloc] initWithNibName:nil bundle:nil];
    [self presentModalViewController:neu animated:YES];     
    [self dismissModalViewControllerAnimated:YES];

O problema é que a animação empurra a nova janela do lado além do iPhone até a janela.

No paisagista, eu adicionei às seguintes linhas:

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
    return (interfaceOrientation == UIInterfaceOrientationPortrait);
}

Quando eu quero voltar para o Highguicontroller, eu chamo:

[self dismissModalViewControllerAnimated:YES];

Tudo isso funciona, mas apenas na segunda animação, vejo a "animação de rotação" correta. Você tem alguma sugestão?

Portanto, uma breve descrição do problema: Na 1. Animação de alta para a paisagem, a paisagem é empurrada para a janela, mas na 2. Animação da paisagem para alta, a rotação parece uma rotação real ...

Eu quero a 1.animação parecida com a 2. animação

Atenciosamente, PloetzenEned

Foi útil?

Solução

Para evitar "o problema é que a animação empurra a nova janela do lado além do iPhone até a janela.", Tente definir a propriedade ModaltransitionSyle do controlador de exibição para um dos seguintes, o que você preferir: enum typedef {uimodaltransitionStyLecoververtical = 0, UimodaltransitionStylefliphorizontal, UimodaltransitionStyCrossDissolve,} UImodaltransitionStyle;

Além disso, se você deseja evitar a rotação animada, poderá definir seu método deve fazer ... para proibir outras orientações, mas depois configurar para receber notificações quando o dispositivo altera fisicamente as orientações e apresentar seu Modal ViewController quando estiver na orientação apropriada para isto. Consulte o código de exemplo "AlternateViews" da Apple para um exemplo disso.

As notificações refletem a orientação física do dispositivo e você pode recebê -las se a interface pode mudar ou não. (Você pode observar a propriedade StatusBarorientation da UIApplications para ver em que orientação está a interface do usuário).

Outras dicas

Parece que você quer que a sequência seja assim:

  1. Gire fisicamente o dispositivo do retrato para a paisagem
  2. Animar a visão de retrato (highguicontroller) à paisagem
  3. Empurre a vista da paisagem (landscapeguicontroller) acima do novo "fundo" da tela

Se estiver certo, você precisará ter algo como o seguinte em seu highguicontroller implementação:

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
  return interfaceOrientation != UIInterfaceOrientationPortraitUpsideDown;
}

Isso cuidará da etapa 2 (ele girará a visão de retrato para a paisagem em qualquer direção).

Então você vai querer algo assim:

- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation
{
  if(fromInterfaceOrientation == UIInterfaceOrientationPortrait) {
    [self presentModalViewController:landscapeguicontroller animated:YES];
  }
  else {
    [self dismissModalViewControllerAnimated:YES];
  }
}

Isso deve apresentar a vista da paisagem após a conclusão da animação de rotação e, em seguida, descartá -la depois que o dispositivo é girado de volta ao retrato.

Espero que ajude!

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