Ruotare in orizzontale per le viste aggiunte alla gerarchia manualmente (iPhone)
-
20-09-2019 - |
Domanda
Ho una semplice UIViewController che utilizza un XIB per la sua interfaccia.
Come tale, l'interfaccia comprende semplicemente un UIView, un UIActivityIndicator e UILabel. Ho i vincoli dimensionali in Interface Builder impostati per mantenere l'indicatore di attività e l'etichetta centrata durante la rotazione vista.
L'UIViewController è impostato per tornare SI per orientamento verticale e orizzontale nel metodo -shouldAutorotateToInterfaceOrientation:
.
La vista viene aggiunto alla gerarchia vista manualmente, utilizzando
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];
Il problema che sto avendo è che se il dispositivo è già in orientamento orizzontale e la vista si aggiunge alla gerarchia, a questo punto, la vista è ancora in orientamento verticale, e non di rotazione automatica.
Che cosa devo fare per aggiungere la vista nel stesso orientamento della vista padre?
Soluzione
Non so se è la risposta giusta alla tua domanda, ma spero che può aiutare:
Per me, ogni volta che aggiungere / respingere un modale o visualizzare una nuova vista, la seguente funzione si chiama:
-(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);
}
}
Qui a cambiare la posizione in funzione dell'orientamento dispositivo corrente. Forse se si rileva che l'orientamento attuale è paesaggio si aggiunge una visualizzazione secondaria che ha tale orientamento.
Alejandra:)