我正在为当前只有肖像的应用添加横向支持,但希望将其设置为可配置,以便方向自动旋转或锁定为纵向或横向。
我的偏好说明符如下所示:
<dict>
<key>Type</key>
<string>PSMultiValueSpecifier</string>
<key>Title</key>
<string>Orientation</string>
<key>Titles</key>
<array>
<string>Auto Rotate</string>
<string>Landscape</string>
<string>Portrait</string>
</array>
<key>Values</key>
<array>
<string>1</string>
<string>2</string>
<string>3</string>
</array>
<key>Key</key>
<string>bz-orientation</string>
<key>DefaultValue</key>
<string></string>
</dict>
我实际上想使用来自UIInterfaceOrientationMask
的{{1}}值,而不是使用偏好值的幻数。
UIApplication.h
,UIInterfaceOrientationMaskAll
&amp; UIInterfaceOrientationMaskLandscape
无论如何要实现这个目标吗?
答案 0 :(得分:0)
据我所知,不是直接的。但是,由于某些预处理程序滥用,您可以将常量到文本(或其他方式)的地图混合在一起,然后在plist中使用字符串。这就是我的意思:
#define ENTRY(constant) @#constant: [NSNumber numberWithInteger:constant]
NSDictionary *orientations = @{
ENTRY(UIInterfaceOrientationMaskAll),
ENTRY(UIInterfaceOrientationMaskLandscape),
ENTRY(UIInterfaceOrientationMaskPortrait)
};
#undef ENTRY
然后将设置包plist中的相关片段更改为
<key>Values</key>
<array>
<string>UIInterfaceOrientationMaskAll</string>
<string>UIInterfaceOrientationMaskLandscape</string>
<string>UIInterfaceOrientationMaskPortrait</string>
</array>
为了检索实际的界面方向掩码:
NSUserDefaults *defs = [NSUserDefaults standardUserDefaults];
NSString *maskAsString = [defs objectForKey:@"bz-orientation"];
NSNumber *maskAsNumber = [orientations objectForKey:maskAsString];
// Enum types are often just typedeffed to `NSInteger` or `NSUInteger`
UIInterfaceOrientationMask mask = [maskAsNumber integerValue];