0

我正在为目前仅纵向但希望使其可配置的应用程序添加横向支持,以便方向自动旋转或可以锁定为纵向或横向。

我的首选项说明符如下所示:

    <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>

我实际上不想使用ie 中的UIInterfaceOrientationMask值,而不是使用幻数作为偏好值,&UIApplication.hUIInterfaceOrientationMaskAllUIInterfaceOrientationMaskLandscapeUIInterfaceOrientationMaskPortrait

有没有办法做到这一点?

4

1 回答 1

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];
于 2013-03-09T07:42:02.720 回答