iphone - rapido - editar centro de control ios 11
¿Cómo obtener la orientación actual del dispositivo programáticamente en iOS 6? (8)
He desarrollado una aplicación iOS y la he probado en un dispositivo iOS6. Durante las pruebas, me di cuenta de que mi aplicación no responde a los cambios de orientación como se esperaba.
Aquí está mi código:
// Autorotation (iOS >= 6.0)
- (BOOL) shouldAutorotate
{
return NO;
}
- (NSUInteger)supportedInterfaceOrientations
{
return UIInterfaceOrientationMaskAll;
}
- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation
{
return UIInterfaceOrientationMaskPortrait;
}
Precisamente, quiero saber qué métodos se llaman en los cambios de orientación en iOS.
En su ViewController, puede usar el método didRotateFromInterfaceOrientation:
para detectar cuándo se ha girado el dispositivo y luego hacer lo que necesite en cada orientación.
Ejemplo:
#pragma mark - Rotation
-(void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation
{
UIDeviceOrientation orientation = [[UIDevice currentDevice] orientation];
switch (orientation) {
case 1:
case 2:
NSLog(@"portrait");
// your code for portrait...
break;
case 3:
case 4:
NSLog(@"landscape");
// your code for landscape...
break;
default:
NSLog(@"other");
// your code for face down or face up...
break;
}
}
Puedes probar esto, lo que resuelve tu problema.
UIInterfaceOrientation orientation = [UIApplication sharedApplication].statusBarOrientation;
Consulte el siguiente enlace para la App extension
Obtenga la orientación actual del dispositivo (extensión de la aplicación)
Puedes probar esto, te puede ayudar:
Cómo cambiar la orientación del dispositivo mediante programación en iOS 6
O
C objetivo:
UIDeviceOrientation orientation = [[UIDevice currentDevice] orientation]
Rápido:
if UIDevice.current.orientation.isLandscape {
// Landscape mode
} else {
// Portrait mode
}
Siga la documentación en UIDevice .
Necesitas llamar
[[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications];
Luego, cada vez que se cambie la orientación, recibirá una UIDeviceOrientationDidChangeNotification.
Tal vez estúpido pero está funcionando (solo en ViewController):
if (self.view.frame.size.width > self.view.frame.size.height) {
NSLog(@"Hello Landscape");
}
Este tutorial ofrece una descripción general agradable y sencilla de cómo manejar la rotación de dispositivos usando UIDeviceOrientationDidChangeNotification
. Debería ayudarlo a comprender cómo usar UIDeviceOrientationDidChangeNotification
para recibir una notificación cuando la orientación del dispositivo haya cambiado.
@property (nonatomic) UIDeviceOrientation m_CurrentOrientation ;
/ * Debe declarar estos códigos en su ViewDidload o ViewWillAppear * /
- (void)viewDidLoad
{
[super viewDidLoad];
[[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications];
[[NSNotificationCenter defaultCenter] addObserver: self selector: @selector(deviceOrientationDidChange:) name: UIDeviceOrientationDidChangeNotification object: nil];
}
/ * Ahora nuestro dispositivo enviará una notificación cada vez que cambiemos la orientación de nuestro dispositivo, para que pueda controlar su código o programa utilizando la orientación actual * /
- (void)deviceOrientationDidChange:(NSNotification *)notification
{
//Obtaining the current device orientation
/* Where self.m_CurrentOrientation is member variable in my class of type UIDeviceOrientation */
self.m_CurrentOrientation = [[UIDevice currentDevice] orientation];
// Do your Code using the current Orienation
}
UIDevice.current.orientation.isLandscape
La respuesta aceptada lee la orientación del dispositivo como se indicó anteriormente, que puede informarse de manera diferente a la orientación de su (s) controlador (es) de vista, especialmente si su dispositivo se mantiene en una posición casi horizontal.
Para obtener la orientación de su controlador de vista específicamente, puede usar su propiedad interfaceOrientation
, que está en desuso desde iOS 8.0 pero aún así informa correctamente.