在.plist中使用iOS常量(来自UIApplication.h)

时间:2013-03-09 07:20:55

标签: ios

我正在为当前只有肖像的应用添加横向支持,但希望将其设置为可配置,以便方向自动旋转或锁定为纵向或横向。

我的偏好说明符如下所示:

    <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.hUIInterfaceOrientationMaskAll&amp; UIInterfaceOrientationMaskLandscape

无论如何要实现这个目标吗?

1 个答案:

答案 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];