2010-05-14 7 views
5

Creé una vista en AppDelegate, que agregué a la ventana de esta manera: DeviceOrientation Check en AppDelegate

[window addSubview:myView];
Quiero poder verificar la orientación del dispositivo cada vez que vuelvo a esta vista, así puedo hacer algunas modificaciones a eso. ¿Cómo puedo hacer eso en la aplicaciónDelegate?

Respuesta

11

Se podría implementar uno de estos métodos en el delegado para ver cuando la aplicación rota:

- (void)application:(UIApplication *)application willChangeStatusBarOrientation:(UIInterfaceOrientation)newStatusBarOrientation duration:(NSTimeInterval)duration; 
- (void)application:(UIApplication *)application didChangeStatusBarOrientation:(UIInterfaceOrientation)oldStatusBarOrientation; 

O simplemente comprobar la orientación de la barra de estado UIApplication según sea necesario con:

[[UIApplication sharedApplication] statusBarOrientation]; 

El la orientación del dispositivo, que puede coincidir o no con la orientación de la interfaz, es:

[[UIDevice currentDevice] orientation]; 
0

En los ejemplos Manzanas del que recibes notificaciones a través del método delegado:

- (void)orientationChanged:(NSNotification *)notification 
{ 
    // We must add a delay here, otherwise we'll swap in the new view 
    // too quickly and we'll get an animation glitch 
    NSLog(@"orientationChanged"); 
    [self performSelector:@selector(updateLandscapeView) withObject:nil afterDelay:0]; 
} 

Y a continuación, para mostrar una pantalla vertical:

- (void)updateLandscapeView 
{ 
PortraitView *portraitView = [[PortraitView alloc] init]; 
portraitView.delegate = self; 
UIDeviceOrientation deviceOrientation = [UIDevice currentDevice].orientation; 
if (UIDeviceOrientationIsLandscape(deviceOrientation) && !isShowingLandscapeView) 
{ 
    [self presentModalViewController: portraitView animated:YES]; 
    isShowingLandscapeView = YES; 
    } 
else if (deviceOrientation == UIDeviceOrientationPortrait && isShowingLandscapeView) 
{ 
    [self dismissModalViewControllerAnimated:YES]; 
    isShowingLandscapeView = NO; 
    } 
[portraitView release]; 
} 

Por supuesto, usted tiene que diseñar el PortraitView como clase delegado para que esto funcione Como era la intención.

No es la única manera pero me parece que funciona bien y está en ejemplos de manzanas. Sin embargo, no lo haría en el Appdelegate, sino en tu escritorio, aunque no sé tu diseño.

+0

por favor vea mi nueva respuesta Le explicaré el nuevo problema que tengo con su solución – ludo

1

Aquí es lo que he intentado por primera vez cuando la aplicación se está cargando por primera vez en el didFinishLauching


[[NSNotificationcenter defaultCenter] addObserver:self selector:@selector(orientationChanged:) name:@"UIDeviceOrientationDidChangeNotification" object: nil]; 

- (void)orientationChanged:(NSNotification *)notification 
{ 
    [self performSelector:@selector(showScreen) withObject:nil afterDelay:0]; 
    [[NSNotificationCenter defaultCenter] removeObserver:self name:@"UIDeviceOrientationDidChangeNotification" object:nil]; 
} 

-(void)showScreen { 

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

    CGRect screenRect = [[UIScreen mainScreen] bounds]; 

} 

} 

Se detecta el paisaje, sino el ancho PanRect espectáculo = 768 y altura = 1024 (Estoy en una Dispositivo Ipad).

+0

Creo que el problema es que solo está revisando si ha girado. No estás haciendo nada con eso. Si presenta una nueva vista, debería ver que los límites son los esperados. La forma en que sospecho que el SO lo manejaría es la misma que si no respondiera a la orientación cambiada a menos que haga algo en su showSceen. Si eso tiene sentido ... – Rudiger

+0

No, realmente no entiendo, me dijiste que presentara una nueva Vista, pero ¿cómo puedo hacer eso si mi pantalla todavía indica el modo de retrato? – ludo

+0

Crea un nuevo UIView y preséntalo como lo harías con cualquier otro ViewController, excepto si haces algo en el plumín, hazlo en horizontal. Lo que estás haciendo en el código es si la orientación es horizontal, presenta una nueva vista que está en el paisaje, de lo contrario, descarta la vista horizontal – Rudiger