2011-09-16 21 views

Respuesta

36

Docs de Apple:

Se envía al controlador de vista justo antes de la interfaz de usuario empieza a girar.

- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration 

envía al controlador de vista después de la interfaz de usuario hace girar:

- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation 

Ver más aquí: UIViewController Class Reference -> Responding to View Rotation Events

ATENCIÓN: Esto está en desuso, ver this post

+4

Este es considerado obsoleto –

+0

willRotate funciona para mí en IOS 9 (Xamarin). Sin embargo, mire la publicación de @wyzkid207 y use viewWillTransitionToSize – jfmg

25

Para los recién llegados a este post, los métodos sugeridos por necto han llegado a ser obsoleto en el IOS de Apple 8. sugiere utilizar:

-(void)viewWillTransitionToSize:(CGSize)size withTransitionCoordinator:(id<UIViewControllerTransitionCoordinator>)coordinator 

Puede utilizar el parámetro "tamaño" como una manera fácil de conseguir si se está en transición hacia retrato o paisaje

decir

if (size.width > size.height) 
{ 
    // Position elements for Landscape 
} 
else 
{ 
    // Position elements for Portrait 
} 

Más información availablein es la Docs.

+0

El tamaño es bastante inútil si la vista de su controlador tiene un ancho/alto fijo en cualquiera de los diseños. – Mecki

+0

Esto es cierto. Solo estaba dando un rápido y sucio ejemplo posible. – wyzkid207

+0

usa UIInterfaceOrientation destinationOrientation = [[UIApplication sharedApplication] statusBarOrientation]; – Rajneesh071

0

En el protocolo UISplitViewController, el nuevo método para iOS8 es

- (void)splitViewController:(UISplitViewController *)svc willChangeToDisplayMode:(UISplitViewControllerDisplayMode)displayMode 

Hay cuatro modos de visualización:

typedef enum UISplitViewControllerDisplayMode : NSInteger { 
    UISplitViewControllerDisplayModeAutomatic, 
    UISplitViewControllerDisplayModePrimaryHidden, 
    UISplitViewControllerDisplayModeAllVisible, 
    UISplitViewControllerDisplayModePrimaryOverlay, 
} UISplitViewControllerDisplayMode; 

PERO este método se NUNCA de retorno automático.

13

Todos los métodos anteriores (en la respuesta de @Nekto) están en desuso en iOS8.0 y versiones posteriores. Fuente: iOS Developer Library

A partir del iOS 8, todos los métodos relacionados con la rotación son desaprobados. En cambio, las rotaciones se tratan como un cambio en el tamaño de la vista del controlador de vista y, por lo tanto, se informan mediante el método viewWillTransitionToSize: withTransitionCoordinator :. Cuando cambia la orientación de la interfaz , UIKit llama a este método en el controlador de vista raíz de la ventana. A continuación, el controlador de vista notifica a sus controladores de vista secundarios , propagando el mensaje a lo largo de la jerarquía de controles .

En iOS8 o posterior, puede utilizar el siguiente método.

- (void)viewWillTransitionToSize:(CGSize)size withTransitionCoordinator:(id <UIViewControllerTransitionCoordinator>)coordinator 
{ 
    [super viewWillTransitionToSize:size withTransitionCoordinator:coordinator]; 

    [coordinator animateAlongsideTransition:^(id<UIViewControllerTransitionCoordinatorContext> context) { 

     // Stuff you used to do in willRotateToInterfaceOrientation would go here. 
     // If you don't need anything special, you can set this block to nil. 

    } completion:^(id<UIViewControllerTransitionCoordinatorContext> context) { 

     // Stuff you used to do in didRotateFromInterfaceOrientation would go here. 
     // If not needed, set to nil. 

    }]; 
} 
+1

esta es una gran respuesta :) –

+1

voy a guardar este – user1244109

+1

esta respuesta es la mejor –

Cuestiones relacionadas