16

Aygıtın dikey veya yatay modda olup olmadığını bulmaya çalışıyorum. Cihaz yukarı bakmıyorsa kodum gayet iyi çalışıyor. Yüze dönükse (ve yönelim == 5), portre ve manzara arasında ayrım yapmaz. UIDeviceOrientation FaceUp ise, "yönlenme" yi yatay/dikey olarak belirlemek zaten var mı?UIDeviceOrientationFaceUp - portre ve manzara arasındaki farkı nasıl ayırt edersiniz?

Kodum: kendi beyanı

typedef enum { 
    UIDeviceOrientationUnknown, 
    UIDeviceOrientationPortrait, 
    UIDeviceOrientationPortraitUpsideDown, 
    UIDeviceOrientationLandscapeLeft, 
    UIDeviceOrientationLandscapeRight, 
    UIDeviceOrientationFaceUp, 
    UIDeviceOrientationFaceDown 
} UIDeviceOrientation; 

typedef enum { 
    UIInterfaceOrientationPortrait   = UIDeviceOrientationPortrait, 
    UIInterfaceOrientationPortraitUpsideDown = UIDeviceOrientationPortraitUpsideDown, 
    UIInterfaceOrientationLandscapeLeft  = UIDeviceOrientationLandscapeRight, 
    UIInterfaceOrientationLandscapeRight  = UIDeviceOrientationLandscapeLeft 
} UIInterfaceOrientation; 

UIDeviceOrientation gösterildiği gibi

UIDeviceOrientation interfaceOrientation = [[UIDevice currentDevice] orientation]; 

NSLog(@"orientation: %d", interfaceOrientation); 

if (interfaceOrientation == UIDeviceOrientationIsLandscape(interfaceOrientation)) { 
    NSLog(@"LANDSCAPE!!!"); 
} 

if (interfaceOrientation == UIDeviceOrientationIsPortrait(interfaceOrientation)) { 
    NSLog(@"PORTRAIT!!!"); 
} 

cevap

37

Sen UIDeviceOrientation ve UIInterfaceOrientation karıştırmamak gerekir, bunlar cihazın yönelim olduğunu söyler farklı fakat ilişkilidir. UIInterfaceOrientation, arabiriminizin yönlendirmesinin ne olduğunu ve UIViewController tarafından kullanıldığını söyler. UIInterfaceOrientation açıkça dikey veya yatay, UIDeviceOrientation ise belirsiz değerlere sahip olabilir (UIDeviceOrientationFaceUp, UIDeviceOrientationFaceDown, UIDeviceOrientationUnknown). Her durumda

cihaz yönelimi UIViewController interfaceOrientation mülkiyet farklı olabilir ne olursa olsun gibi, [[UIDevice currentDevice] orientation] ile UIViewController yönelimini belirlemek için çalışmamalıdır (örneğin uygulama tüm [[UIDevice currentDevice] orientation] de manzaraya döndürmek etmezse can UIDeviceOrientationLandscapeLeft iken, viewController.interfaceOrientationUIInterfaceOrientationPortrait olabilir.

güncelle: IOS 8.0 olarak, [UIViewController interfaceOrientation] kaldırıldı. here'un sunduğu bir alternatif [[UIApplication sharedApplication] statusBarOrientation]'dur. Bu ayrıca UIInterfaceOrientation döndürür.

5

Ben benim durumumda ben geçen izin yönünü önbelleğe, UIDeviceOrientationUnknown, UIDeviceOrientationFaceUp ve UIDeviceOrientationFaceDown görmezden istiyorum istedi & istenmeyen cihazlar yönelimleri ile başa çıkmak için bu kod iskeleti olun. Bu kod iPhone ve iPad cihazları ile ilgilenir ve sizin için yararlı olabilir.

- (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 */ 
     } 
    } 
}