检查当前方向是否支持方向

时间:2013-03-04 23:10:02

标签: objective-c xcode ipad uideviceorientation

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

我使用

检索了数组中支持的方向
NSArray *supportedOrientations = [[[NSBundle mainBundle] infoDictionary]     objectForKey:@"UISupportedInterfaceOrientations"]; 

我的方法有签名

-(BOOL) isInvalidOrientation: (UIDeviceOrientation) orientation 

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

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

[supportedOrientations containsObject:self.currentOrientation];

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

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

2 个答案:

答案 0 :(得分:3)

问题是UISupportedInterfaceOrientations info键为您提供了一个字符串数组。虽然self.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];

答案 1 :(得分: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");
}