2

在我的属性列表文件中,我提到了所有支持的方向。我有许多支持不同方向的应用程序。为了处理所有这些应用程序的所有 UI 相关的东西,我有一个共同的项目。所以,我不能在这个公共项目中做任何特定于应用程序的事情,因为它也会影响其他应用程序。在这个通用项目的一个文件中,我需要检查是否支持设备方向。

我已经使用数组检索了支持的方向

NSArray *supportedOrientations = [[[NSBundle mainBundle] infoDictionary]     objectForKey:@"UISupportedInterfaceOrientations"]; 

我的方法有签名

-(BOOL) isInvalidOrientation: (UIDeviceOrientation) orientation 

我需要检查是否支持当前方向,即我需要检查supportedOrientations 数组中是否存在当前方向。

我无法这样做,因为当我使用

[supportedOrientations containsObject:self.currentOrientation];

我收到一条错误消息,说 ARC 不允许将 UIDeviceOrientation 隐式转换为 id。

这是因为它们是不兼容的类型。我该如何检查?

4

2 回答 2

3

问题是UISupportedInterfaceOrientationsinfo 键为您提供了一个字符串数组。Whileself.currentOrientation给你一个枚举值来自UIDeviceOrientation. 您需要一种将枚举值映射到字符串值的方法。另请注意,您正在处理设备方向和界面方向。

- (NSString *)deviceOrientationString:(UIDeviceOrientation)orientation {
    switch (orientation) (
        case UIDeviceOrientationPortrait:
            return @"UIInterfaceOrientationPortrait";
        case UIDeviceOrientationPortraitUpsideDown:
            return @"UIInterfaceOrientationPortraitUpsideDown";
        case UIDeviceOrientationLandscapeLeft:
            return @"UIInterfaceOrientationLandscapeLeft";
        case UIDeviceOrientationLandscapeRight:
            return @"UIInterfaceOrientationLandscapeRight";
        default:
            return @"Invalid Interface Orientation";
    }
}

NSString *name = [self deviceOrientationString:self.currentOrientation];

BOOL res = [supportedOrientations containsObject:name];
于 2013-03-04T23:12:37.383 回答
1

我有类似的需要来确定应用程序支持的方向,以便预先缓存一些资源。但我只需要知道应用程序是否支持纵向、横向或两者。该线程使我找到了以下解决方案,因此我想我可能会发布它。

// get supported screen orientations
NSArray *supportedOrientations = [[[NSBundle mainBundle] infoDictionary]
                                  objectForKey:@"UISupportedInterfaceOrientations"];
NSString *supportedOrientationsStr = [supportedOrientations componentsJoinedByString:@" "];
NSRange range = [supportedOrientationsStr rangeOfString:@"Portrait"];
if ( range.location != NSNotFound )
{
    NSLog(@"supports portrait");
}
range = [supportedOrientationsStr rangeOfString:@"Landscape"];
if ( range.location != NSNotFound )
{
    NSLog(@"supports landscape");
}
于 2013-03-05T09:20:47.637 回答