Orientación sin animation dando resultados extraños cuando UIAlertView está presente

Estoy enfrentando un problema extraño aquí.

Por alguna razón estoy desactivando la animation durante el cambio de orientación en mi controller de vista usando [UIView setAnimationsEnabled:NO];
Pero cuando la vista de alerta está presente y si cambio la orientación, está dando resultados extraños.

La captura de pantalla adjunta es cuando cambio la orientación al paisaje.

Modo paisaje

Tenga en count: estoy usando UIAlertView estándar y es una superposition pnetworkingeterminada que se muestra cuando la vista de alerta está presente y aquí no hay personalización.

Según la documentation

If you disable animations, code inside subsequent animation blocks is still executed but no animations actually occur. Thus, any changes you make inside an animation block are reflected immediately instead of being animated.

Por lo tanto, no debe afectar el cambio de tamaño de la superposition pnetworkingeterminada. Is it a restriction in disabling animation !??

No entiendo por qué estoy recibiendo así. ¿Alguien podría ayudar a resolver esto?

Cuando configura [UIView setAnimationsEnabled:NO]; , UIAlertView no UIAlertView tamaño de su vista de superposition (creo que es un error).

Opcionalmente, puede restringir la orientación cuando la vista de alerta está en la pantalla como sigue.

Cree una variable BOOL en el file .h.

 BOOL shouldRotate; 

viewDidload con YES en viewDidload .

Y cada vez que muestre una alerta en ese momento, make shouldRotate = NO;

Y UIAlertView delegado de UIAlertView siguiente manera:

 - (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex{ shouldRotate = YES; } 

Hope te ayudará.

Editar: Como quiera, no hay animation y rotation con vista de alerta.

Esto es en realidad un truco, pero funciona,

alert es un object UIAlertView declarado en el file .h.

 - (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation{ if (UIInterfaceOrientationPortrait == UIInterfaceOrientationIsPortrait(fromInterfaceOrientation)) { UIImageView *imgView = (UIImageView *)[alert.superview.subviews objectAtIndex:0]; imgView.frame = CGRectMake(0.0, 0.0, 480.0, 320.0); } else{ UIImageView *imgView = (UIImageView *)[alert.superview.subviews objectAtIndex:0]; imgView.frame = CGRectMake(0.0, 0.0, 320.0, 480.0); } } 

Otra posibilidad para hacer frente a este error sería descartar la vista de alerta programáticamente antes de la rotation y mostrar una nueva después de completar la rotation.

Eso funcionaría automáticamente para cualquier dispositivo iOS independientemente del tamaño de la pantalla.

Esto parece ser un error en iOS6 y más abajo y se soluciona en iOS7 .

Vista de alerta de iOS sin animación