如何使用UIInterfaceOrientation枚举值进行测试

时间:2013-09-27 15:12:37

标签: ios bit-manipulation uiinterfaceorientation

我在按位上有点迷失;)

我的目标是检索应用程序支持的整个方向集,并测试每个结果值以更新自定义变量。 我的问题是我不知道如何进行比较(我得到转换/测试问题......)

首先我读了这篇文章:Testing for bitwise Enum values 但它并没有给我带来光明......

假设我的应用程序声明如下(以下是我的变量 supportedOrientations 的日志输出): 支持的方向=(     UIInterfaceOrientationPortrait )

所以我的第一次尝试是尝试对整数值进行一些测试,但它不起作用(即使申请被声明为纵向模式,测试返回' false'):

NSArray *supportedOrientations = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"UISupportedInterfaceOrientations"];
NSLog(@"[supported orientations = %@", supportedOrientations);
// for clarity just make a test on the first orientation we found
if ((NSInteger)supportedOrientations[0] == UIInterfaceOrientationPortrait) {
  NSLog(@"We detect Portrait mode!");
}

我的第二次尝试是尝试按位事物,但这次总是返回' true' (即使支持的方向不是UIInterfaceOrientationPortrait)。 :

NSArray *supportedOrientations = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"UISupportedInterfaceOrientations"];
NSLog(@"[supported orientations = %@", supportedOrientations);
// for clarity just make a test on the first orientation we found
if ((NSInteger)supportedOrientations[0] | UIInterfaceOrientationPortrait) { // <-- I also test with UIInterfaceOrientationMaskPortrait but no more success
  NSLog(@"We detect Portrait mode!");
}

所以我的问题是:

  • 如何在我的情况下测试方向?

  • 是否可以通过使用按位(使用| operand)来使用测试?

1 个答案:

答案 0 :(得分:0)

官方文档说 UISupportedInterfaceOrientations 是一个字符串数组https://developer.apple.com/library/ios/documentation/general/Reference/InfoPlistKeyReference/Articles/iPhoneOSKeys.html#//apple_ref/doc/uid/TP40009252-SW10

因此,解决方案是对数组中找到的每个元素使用NSString比较。

NSArray *supportedOrientations = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"UISupportedInterfaceOrientations"];
for (NSString *orientation in supportedOrientations) {        
    if ([orientation isEqualToString:@"UIInterfaceOrientationPortrait"] ||
        [orientation isEqualToString:@"UIInterfaceOrientationPortraitUpsideDown"]) {
        NSLog(@"*** We detect Portrait mode!");
    } else if ([orientation isEqualToString:@"UIInterfaceOrientationLandscapeLeft"] ||
               [orientation isEqualToString:@"UIInterfaceOrientationLandscapeRight"]) {
        NSLog(@"*** We detect Landscape mode!");
    }
}

请注意,这样做我们没有利用枚举值(UIInterfaceOrientation类型),但它可以工作!