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>

設定 値に魔法数を使用する代わりに、実際には、、&の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 に答える