Gire para a paisagem para vistas adicionadas à hierarquia manualmente (iPhone)
-
20-09-2019 - |
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?
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 :)