Pergunta

Eu tenho um simples uiviewController que usa um XIB para sua interface.

Como tal, a interface simplesmente compreende um UIView, um uiiiactivityIndicator e um uilabel. Eu tenho as restrições de dimensionamento no conjunto do construtor de interface para manter o indicador de atividade e o rótulo centralizado quando a visualização gira.

O UiviewController está definido para retornar sim para o retrato e orientações paisagísticas no -shouldAutorotateToInterfaceOrientation: método.

A visão é adicionada à hierarquia de visualizações manualmente, usando

if (!activityOverlay)
    activityOverlay = [[XBActivityOverlayViewController alloc] initWithNibName:@"XBActivityOverlayViewController" bundle:nil message:@"Connecting..."];

[activityOverlay.view setAlpha:0.0f];
[self.window addSubview:activityOverlay.view];
[UIView beginAnimations:nil context:nil];
[UIView setAnimationDuration:0.3f];
[activityOverlay.view setAlpha:0.9f];
[UIView commitAnimations];

O problema que estou tendo é que, se o dispositivo já estiver na orientação da paisagem e a vista for adicionada à hierarquia neste momento, a vista ainda está na orientação do retrato e não gira automaticamente.

O que preciso fazer para adicionar a visualização na mesma orientação que a visualização pai?

Foi útil?

Solução

Não sei se é a resposta certa para sua pergunta, mas espero que possa ajudar:

Para mim, toda vez que adiciono/descarto um modal ou exibo uma nova visualização, a seguinte função é chamada:

-(void) detectOrientation 
{


 if (([[UIDevice currentDevice] orientation] == UIDeviceOrientationLandscapeLeft) || 
     ([[UIDevice currentDevice] orientation] == UIDeviceOrientationLandscapeRight)) 
 {

             item1.frame = CGRectMake(147.0, 241.0, 56.0, 28.0);
     item2.frame = CGRectMake(265.0, 241.0, 56.0, 28.0);

 }
 else if (([[UIDevice currentDevice] orientation] == UIDeviceOrientationPortrait) ||
          ([[UIDevice currentDevice] orientation] == UIDeviceOrientationPortraitUpsideDown) || !inLandscapeOrientation)
 {

    item1.frame = CGRectMake(35.0, 425.0, 35.0, 28.0);
item2.frame = CGRectMake(176.0, 425.0, 35.0, 28.0);
 }

}

Aqui eu altero a posição de acordo com a orientação atual do dispositivo. Talvez se você detectar que a orientação atual é uma paisagem, você adiciona uma subview que possui essa orientação.

Alejandra :)

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