iphone - pinturas - UIDeviceOrientationFaceUp: ¿cómo distinguir entre retrato y paisaje?
hangel montero tutoriales (2)
Hago este código esqueleto para tratar con orientaciones de dispositivos deseados y no deseados, en mi caso, quiero ignorar UIDeviceOrientationUnknown, UIDeviceOrientationFaceUp y UIDeviceOrientationFaceDown, guardando en caché la última orientación permitida. Este código trata de dispositivos iPhone y iPad y puede ser útil para usted.
- (void)modXibFromRotation {
UIDeviceOrientation orientation = [[UIDevice currentDevice] orientation];
NSString *device = [[UIDevice currentDevice]localizedModel];
UIInterfaceOrientation cachedOrientation = [self interfaceOrientation];
if ([device isEqualToString:@"iPad"]) {
if (orientation == UIDeviceOrientationUnknown ||
orientation == UIDeviceOrientationFaceUp ||
orientation == UIDeviceOrientationFaceDown) {
orientation = (UIDeviceOrientation)cachedOrientation;
}
if (orientation == UIDeviceOrientationLandscapeLeft || orientation == UIDeviceOrientationLandscapeRight) {
/* Your code */
}
if (orientation == UIDeviceOrientationPortrait || orientation == UIDeviceOrientationPortraitUpsideDown) {
/* Your code */
}
}
if ([device isEqualToString:@"iPhone"] || [device isEqualToString:@"iPod"]) {
if (orientation == UIDeviceOrientationUnknown ||
orientation == UIDeviceOrientationFaceUp ||
orientation == UIDeviceOrientationFaceDown) {
orientation = (UIDeviceOrientation)cachedOrientation;
}
if (orientation == UIDeviceOrientationLandscapeLeft || orientation == UIDeviceOrientationLandscapeRight) {
/* Your code */
}
if (orientation == UIDeviceOrientationPortrait || orientation == UIDeviceOrientationPortraitUpsideDown) {
/* Your code */
}
}
}
Estoy intentando averiguar si el dispositivo está en modo vertical u horizontal. Mi código funciona bastante bien si el dispositivo no está hacia arriba. Si lo hace boca arriba (y orientación == 5), no distinguirá entre retrato y paisaje. ¿Hay alguna forma de determinar la "orientación" en términos de paisaje / retrato si la UIDeviceOrientation es FaceUp?
Mi código:
UIDeviceOrientation interfaceOrientation = [[UIDevice currentDevice] orientation];
NSLog(@"orientation: %d", interfaceOrientation);
if (interfaceOrientation == UIDeviceOrientationIsLandscape(interfaceOrientation)) {
NSLog(@"LANDSCAPE!!!");
}
if (interfaceOrientation == UIDeviceOrientationIsPortrait(interfaceOrientation)) {
NSLog(@"PORTRAIT!!!");
}
No debe confundir UIDeviceOrientation
y UIInterfaceOrientation
, son diferentes pero están relacionados como se muestra en su declaración.
typedef enum {
UIDeviceOrientationUnknown,
UIDeviceOrientationPortrait,
UIDeviceOrientationPortraitUpsideDown,
UIDeviceOrientationLandscapeLeft,
UIDeviceOrientationLandscapeRight,
UIDeviceOrientationFaceUp,
UIDeviceOrientationFaceDown
} UIDeviceOrientation;
typedef enum {
UIInterfaceOrientationPortrait = UIDeviceOrientationPortrait,
UIInterfaceOrientationPortraitUpsideDown = UIDeviceOrientationPortraitUpsideDown,
UIInterfaceOrientationLandscapeLeft = UIDeviceOrientationLandscapeRight,
UIInterfaceOrientationLandscapeRight = UIDeviceOrientationLandscapeLeft
} UIInterfaceOrientation;
UIDeviceOrientation
le indica cuál es la orientación del dispositivo. UIInterfaceOrientation
le informa cuál es la orientación de su interfaz y lo utiliza UIViewController
. UIInterfaceOrientation
será claramente vertical u horizontal, mientras que UIDeviceOrientation
puede tener valores ambiguos ( UIDeviceOrientationFaceUp
, UIDeviceOrientationFaceDown
, UIDeviceOrientationUnknown
).
En cualquier caso, no debe intentar determinar la orientación de un UIViewController con [[UIDevice currentDevice] orientation]
, ya que no importa cuál sea la orientación del dispositivo, la propiedad UIViewController interfaceOrientation
puede ser diferente (por ejemplo, si su aplicación no gira a horizontal). toda la [[UIDevice currentDevice] orientation]
puede ser UIDeviceOrientationLandscapeLeft
mientras que viewController.interfaceOrientation
puede ser UIInterfaceOrientationPortrait
).
Actualización: a partir de iOS 8.0, [UIViewController interfaceOrientation]
está en desuso. Una alternativa ofrecida here es [[UIApplication sharedApplication] statusBarOrientation]
. Esto también devuelve UIInterfaceOrientation
.