2

私のプロパティ リスト ファイルでは、サポートされているすべての向きについて説明しました。さまざまな向きをサポートする多くのアプリケーションがあります。これらすべてのアプリケーションですべての UI 関連のものを処理するために、共通のプロジェクトがあります。したがって、他のアプリにも影響を与えるため、この共通プロジェクトでアプリ固有のことを行うことはできません。この共通プロジェクトのファイルの 1 つで、デバイスの向きがサポートされているかどうかを確認する必要があります。

を使用して、サポートされている向きを配列で取得しました

NSArray *supportedOrientations = [[[NSBundle mainBundle] infoDictionary]     objectForKey:@"UISupportedInterfaceOrientations"]; 

私のメソッドには署名があります

-(BOOL) isInvalidOrientation: (UIDeviceOrientation) orientation 

現在の向きがサポートされているかどうかを確認する必要があります。つまり、現在の向きが supportedOrientations 配列にあるかどうかを確認する必要があります。

私はそれを行うことができません

[supportedOrientations containsObject:self.currentOrientation];

UIDeviceOrientation から id への暗黙的な変換が ARC では許可されていないというエラーが表示されます。

これは、互換性のないタイプであるためです。どうすれば確認できますか?

4

2 に答える 2

3

問題は、UISupportedInterfaceOrientationsinfoキーが文字列の配列を提供することです。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];
于 2013-03-04T23:12:37.383 に答える
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");
}
于 2013-03-05T09:20:47.637 に答える