2010-11-29 17 views

Respuesta

32

Depende cuando se quiere reaccionar:

Si antes de la rotación, anulación de UIViewController:

- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration 
{ 
// do something before rotation 
} 

Si desea realizar algo después de la rotación:

- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation 
{ 
// do something after rotation 
} 

Referencia:

http://developer.apple.com/library/ios/documentation/UIKit/Reference/UIViewController_Class/Reference/Reference.html#//apple_ref/occ/instm/UIViewController/willRotateToInterfaceOrientation:duration:

+3

Estos métodos han quedado obsoletos. –

+1

Obsoleto en iOS 8.0 – onmyway133

0

willRotateToInterfaceOrientation: es el método que está posiblemente mirando. Lea sobre eso.

0

UIViewController s se envían willRotateToInterfaceOrientation:duration: justo antes de la rotación, y didRotateFromInterfaceOrientation: después de la rotación.

Para configurar animaciones adicionales, siga cualquiera willAnimateRotationToInterfaceOrientation:duration: o willAnimateFirstHalfOfRotationToInterfaceOrientation:duration:, didAnimateFirstHalfOfRotationToInterfaceOrientation: y willAnimateSecondHalfOfRotationFromInterfaceOrientation:duration:. Estos últimos se usan para animaciones de dos pasos, que generalmente se usan cuando tiene vistas de encabezado o pie de página que se desplazan fuera de la pantalla para la animación de transición principal.

6

mensajes UIDeviceOrientationDidChangeNotification

UIApplication mensajes UIApplicationWillChangeStatusBarOrientationNotification y UIApplicationDidChangeStatusBarOrientationNotification y tiene una devolución de llamada relacionada delegado para cada uno.

UIViewController recibe varias llamadas relacionadas con la orientación activadas por la notificación UIDevice si el controlador de vista es parte de la jerarquía del controlador administrada por una ventana.

Si ya está utilizando un UIViewController, implemente algunos de los métodos relacionados con la orientación, de lo contrario, regístrese para las notificaciones de UIDevice. El método más importante de UIViewController es shouldAutorotateToInterfaceOrientation, porque si se devuelve NO, los otros no se invocan.

+0

Prefiero registrarme como observador para recibir las notificaciones de orientación. Así que voto esta respuesta. – AechoLiu

0

Mi aplicación recinto de seguridad: https://github.com/comonitos/programatical_device_orientation

La solución es fácil:

en la interfaz (archivo h):

BOOL rotated; 

de aplicación (m archivo):

  1. reescribir

    - (BOOL) shouldAutorotateToInterfaceOrientation: (UIInterfaceOrientation) interfaceOrientation { return rotated; }

2 llamada [Configuración de auto]

-(void) setup 
{ 
    rotated = YES; 
    [[UIDevice currentDevice] setOrientation:UIDeviceOrientationLandscapeLeft]; 
    rotated = NO; 
} 
+0

No debe hacer mucho más que decirle al sistema operativo si admite un cambio de orientación en el método 'shouldAutorotateToInterfaceOrientation'. Además, esto está en desuso en iOS6. http://developer.apple.com/library/ios/#documentation/uikit/reference/UIViewController_Class/DeprecationAppendix/AppendixADeprecatedAPI.html#//apple_ref/occ/instm/UIViewController/shouldAutorotateToInterfaceOrientation: – mahboudz

+0

sí. ahora es. desde ese momento estoy transformando puntos de vista – comonitos

0

sólo tiene que utilizar este fragmento de código para comprobar los cambios de orientación.

override func viewWillTransitionToSize(size: CGSize, withTransitionCoordinator coordinator: UIViewControllerTransitionCoordinator) { 
    if UIDevice.currentDevice().orientation.isLandscape.boolValue { 
     print("Landscape") 
    } else { 
     print("Portrait") 
    } 
} 
Cuestiones relacionadas