在我的属性列表文件中,我已经提到了所有支持的方向。我有很多应用程序支持不同的方向。为了处理所有这些应用程序的UI相关内容,我有一个共同的项目。所以,我不能在这个常见项目中做任何特定于应用程序的东西,因为它也会影响其他应用程序。在这个常见项目的一个文件中,我需要检查是否支持设备方向。
我使用
检索了数组中支持的方向NSArray *supportedOrientations = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"UISupportedInterfaceOrientations"];
我的方法有签名
-(BOOL) isInvalidOrientation: (UIDeviceOrientation) orientation
我需要检查是否支持当前方向,即我需要检查supportedOrientations数组中是否存在当前方向。
我无法这样做,因为当我使用
时[supportedOrientations containsObject:self.currentOrientation];
我收到一条错误消息,说明ARC不允许将UIDeviceOrientation隐式转换为id。
这是因为它们是不兼容的类型。我该如何检查?
答案 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");
}