0

我有点迷失在按位;)

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

首先我读了这篇文章: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!");
}

所以我的问题是:

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

  • 它是一种通过使用按位事物(使用 | 操作数)来使用测试的方法吗?

4

1 回答 1

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 类型),但它确实有效!

于 2013-09-30T09:32:01.063 回答