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?

È stato utile?

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:)

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top