4

すべてのタイプのデバイスに対して、Default-568h@2x.png、Default-Portrait.png、Default.png、Default@2x.png などの名前のデフォルト スプラッシュ スクリーンがあります。

システムが特定のデバイスに適したスプラッシュ スクリーンを自動的に選択して表示することはわかっています。

質問: システムがどの画像を選択したかを知ることは可能ですか? システムによって選択された適切な画像を UIimageView にロードする方法。

私はこれを試しました:

UIImageView *splashView=[[UIImageView alloc] initWithFrame:CGRectMake(0, 0, screenWidth, screenHeight)];
splashView.image=[UIImage imageNamed:@"Default.png"];

ただし、すべてのタイプのデバイス (iPhone 4、5、iPad) に対して Default.png という名前の画像のみを読み込みます。

手動で管理する必要がありますか? デバイスの種類を特定した後、適切なイメージをロードするということですか?

4

4 に答える 4

8

同じ問題に遭遇した後、この質問を見つけました。iOSを使用している場合、[UIImage imagedNamed:@"Default"];網膜と非網膜を検出して適用するよう@2xですが、iPhone 5 を検出して適用しないようです。-568h

私が思いついた解決策は、メイン ウィンドウの高さをチェックし、存在する場合は適切な画像を返す UIImage にカテゴリを記述することでした。

@interface UIImage (Compatible)

+ (UIImage *)compatibleImageNamed:(NSString *)name;

@end

@implementation UIImage (Compatible)

+ (UIImage *)compatibleImageNamed:(NSString *)name {

    if ([[UIScreen mainScreen] bounds].size.height==568.0){

        NSString *extension = [name pathExtension];

        NSString *iPhone5Name = [[name stringByDeletingPathExtension] stringByAppendingString:@"-568h"];

        if (extension.length!=0)
            iPhone5Name = [iPhone5Name stringByAppendingPathExtension:extension];

        UIImage *image = [UIImage imageNamed:iPhone5Name];

        if (image)
            return image;

    }

    return [UIImage imageNamed:name];
}

@end

次に、私が使用している iPhone 5 バージョンも含むイメージをロードしたいことがわかっている場合は、次のようにします。

[UIImage compatibleImageNamed:@"MyImage"];

于 2012-10-04T16:24:42.907 に答える
3

すべてのスプラッシュ画面に対して手動で行いました:

 CGRect screenRect = [[UIScreen mainScreen] bounds];
 float screenWidth = screenRect.size.width;
 float screenHeight = screenRect.size.height;

if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone) {
    splashView=[[UIImageView alloc] initWithFrame:CGRectMake(0, 0, screenWidth, screenHeight)];
    if (screenHeight==568.0) {
         splashView.image=[UIImage imageNamed:@"Default-568h@2x.png"];//iPhone 5
    }else{
          splashView.image=[UIImage imageNamed:@"Default.png"]; //other iPhones
    } 
} else {
    splashView=[[UIImageView alloc] initWithFrame:CGRectMake(0, 20, screenWidth, screenHeight-20)];
    splashView.image=[UIImage imageNamed:@"Default-Portrait.png"];// iPads
}
于 2012-09-27T10:32:11.327 に答える
1

これを変更する必要があります:

[UIImage imageNamed:@"Default.png"];

[UIImage imageNamed:@"Default"];
于 2012-12-26T23:20:29.240 に答える