Paisagem de retrato de rotação com 2 xib
-
21-09-2019 - |
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
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:
- Gire fisicamente o dispositivo do retrato para a paisagem
- Animar a visão de retrato (
highguicontroller
) à paisagem - 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!