Xcode 5とアセットカタログ:LaunchImageを参照する方法?


102

Xcode 5のアセットカタログを使用してLaunchImageいます。ホームビューの背景画像として自分を使用したいと思います(「読み込み」から「読み込み」への移行をスムーズにするためのかなり一般的な方法です)。

アセットカタログの同じエントリを使用してスペースを節約し、2つの異なるイメージセットでイメージを複製する必要がないようにしたいと思います。

ただし、次のように呼び出します。

UIImage *image = [UIImage imageNamed:@"LaunchImage"]; //returns nil

回答:


83

これは、LaunchImageの(ほぼ)完全なリストです(ステータスバーのないiPadイメージは除きます)。

  • LaunchImage-568h@2x.png
  • LaunchImage-700-568h@2x.png
  • LaunchImage-700-Landscape@2x~ipad.png
  • LaunchImage-700-Landscape〜ipad.png
  • LaunchImage-700-Portrait@2x~ipad.png
  • LaunchImage-700-Portrait〜ipad.png
  • LaunchImage-700@2x.png
  • LaunchImage-Landscape@2x~ipad.png
  • LaunchImage-Landscape〜ipad.png
  • LaunchImage-Portrait@2x~ipad.png
  • LaunchImage-Portrait〜ipad.png
  • LaunchImage.png
  • LaunchImage@2x.png
  • LaunchImage-800-667h@2x.png(iPhone 6)
  • LaunchImage-800-Portrait-736h@3x.png(iPhone 6 Plusポートレート)
  • LaunchImage-800-Landscape-736h@3x.png(iPhone 6 Plusランドスケープ)
  • LaunchImage-1100-Portrait-2436h@3x.png(iPhone Xポートレート)
  • LaunchImage-1100-Landscape-2436h@3x.png(iPhone X横)

ステータスバーのないiPad画像を知っている人はいますか?
Mohamed Hafez 2014

1
@Mohamed Hafez:Pichirichiは実際にそれらを彼のリストに含めています。LaunchImage-Portrait〜ipad.png、LaunchImage-Portrait @ 2x〜ipad.png、LaunchImage-Landscape〜ipad.png、LaunchImage-Landscape @ 2x〜ipad.pngです。
John Jacecko 2014

700と800はどういう意味ですか?
Sound Blaster 2014年

2
私はそれを捕まえた:それはiOS 7と8を意味する
Sound Blaster

4
XCodeがこれらの画像アセットのファイル名を自動的に作成し、フープをジャンプしてそれらに直接アクセスする方法を理解させるのは非常に不愉快です...
Mr. T

67
- (NSString *)splashImageNameForOrientation:(UIInterfaceOrientation)orientation {
    CGSize viewSize = self.view.bounds.size;
    NSString* viewOrientation = @"Portrait";
    if (UIDeviceOrientationIsLandscape(orientation)) {
        viewSize = CGSizeMake(viewSize.height, viewSize.width);
        viewOrientation = @"Landscape";
    }

    NSArray* imagesDict = [[[NSBundle mainBundle] infoDictionary] valueForKey:@"UILaunchImages"];
    for (NSDictionary* dict in imagesDict) {
        CGSize imageSize = CGSizeFromString(dict[@"UILaunchImageSize"]);
        if (CGSizeEqualToSize(imageSize, viewSize) && [viewOrientation isEqualToString:dict[@"UILaunchImageOrientation"]])
            return dict[@"UILaunchImageName"];
    }
    return nil;
}

1
よく働く。メインバンドルの情報ディクショナリで使用可能な起動画像を検索し、一致する解像度の画像を選択するための巧妙で洗練されたアプローチ!
iOSX

1
これは素晴らしいアイデアであり、Appleがinfo.plistの構造を変更しない限り、私のアイデアよりも優れており、将来の証拠にもなります。
nonamelive 2015

1
これは非常に賢い解決策です。Xcodeプロジェクトに複数のターゲットがあり、LaunchImage文字列を使用しただけでは、常に正しい画像が返されない場合があります。どうもありがとう。
Enrico Susatyo 2015

3
素晴らしいアイデアですが。ただし、ステータスバーが不透明な画面では機能しません。したがって、self.view.bounds.sizeを[UIScreen mainScreen] .bounds.sizeに変更する必要がありました
RamaKrishna Chunduri

1
素晴らしいソリューション。小さな編集が必要:UIInterfaceOrientationからUIDeviceOrientationへの暗黙の変換があります。UIInterfaceOrientationIsLandscape()代わりに使用してください。
Almog C

53

LaunchImagesは特別であり、実際にはデバイス上のアセットカタログではありません。iFunBox / iExplorer / etc(またはシミュレーター、またはビルドディレクトリ)を使用している場合、最終的な名前を確認し、それらを使用するコードを記述できます。iOS7のみのiPhoneのみのプロジェクトの場合、これにより正しい起動イメージが設定されます。

NSString *launchImage;
if  ((UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone) &&
     ([UIScreen mainScreen].bounds.size.height > 480.0f)) {
    launchImage = @"LaunchImage-700-568h";
} else {
    launchImage = @"LaunchImage-700";
}

[self.launchImageView setImage:[UIImage imageNamed:launchImage]];

これをviewDidLoadに入れました。

これは実際には理想的ではありません。Appleがこれを行うための素晴らしいAPIを提供してくれたら素晴らしいでしょう。


2
これは私にとってはうまくいきましたが、起動画像を参照するより簡単な方法があったらと思います。
Zorayr 2013年

Xcode 5.0.2で修正されている可能性があります。以下を参照してください。「LaunchImage.png」を参照するだけで機能するようです
Adam

1
@アダムそれが本当だったらよかった!iphone5s / xcode5.0.2 / ios7.0.4を試してみたところ、[UIImage imageNamed:@ "LaunchImage.png"]で何も表示されません。
JosephH 2013年

@JosephHうーん。多分それは新しく作成されたプロジェクトを必要としますか?これはXcode 5.0.2で作成されたプロジェクトです。デフォルトへの変更のみが「無効なARC」でした。それは素晴らしいです:)。私は何かを見つけることができるかどうかを確認しますが、私は変わったかもしれない他に何を考えることはできません
アダム・

同様のコードを試しましたが、「デフォルト」と「デフォルト-568h」(元のリソースファイル名)を使用していました。エクスポートされたApp Bundleを調べたところ、Xcodeが名前を「LaunchImage-700 *」に変更していることに気付きました。
Nicolas Miari 2014年

27

私のアプリは現在iOS 7以降のみをサポートしています。

これは、アセットカタログの起動画像を参照する方法です。

NSDictionary *dict = @{@"320x480" : @"LaunchImage-700",
                       @"320x568" : @"LaunchImage-700-568h",
                       @"375x667" : @"LaunchImage-800-667h",
                       @"414x736" : @"LaunchImage-800-Portrait-736h"};
NSString *key = [NSString stringWithFormat:@"%dx%d",
    (int)[UIScreen mainScreen].bounds.size.width,
    (int)[UIScreen mainScreen].bounds.size.height];
UIImage *launchImage = [UIImage imageNamed:dict[key]];

古いiOSバージョンをサポートする場合は、キーと値のペアをさらに追加できます。


1
iOS 8以降でUIScreen.mainScreen.boundsは、現在のインターフェースの向きによって異なります。stackoverflow.com/a/24153540/158525を
Jean Regisser

1
これをありがとう、まさに私が探していたもの!
ジョセフパターソン

htis、アプリアイコンにアクセスする方法をありがとう
AsifHabib 2015

10

ここでは、上記のCherpak Evgenyによって提供されたソリューションに基づくUIImageのカテゴリ。

UIImage + SplashImage.h

#import <UIKit/UIKit.h>

/**
 * Category on `UIImage` to access the splash image.
 **/
@interface UIImage (SplashImage)

/**
 * Return the name of the splash image for a given orientation.
 * @param orientation The interface orientation.
 * @return The name of the splash image.
 **/
+ (NSString *)si_splashImageNameForOrientation:(UIInterfaceOrientation)orientation;

/**
 * Returns the splash image for a given orientation.
 * @param orientation The interface orientation.
 * @return The splash image.
 **/
+ (UIImage*)si_splashImageForOrientation:(UIInterfaceOrientation)orientation;

@end

UIImage + SplashImage.m

#import "UIImage+SplashImage.h"

@implementation UIImage (SplashImage)

+ (NSString *)si_splashImageNameForOrientation:(UIInterfaceOrientation)orientation
{
    CGSize viewSize = [UIScreen mainScreen].bounds.size;

    NSString *viewOrientation = @"Portrait";

    if (UIDeviceOrientationIsLandscape(orientation))
    {
        viewSize = CGSizeMake(viewSize.height, viewSize.width);
        viewOrientation = @"Landscape";
    }

    NSArray* imagesDict = [[[NSBundle mainBundle] infoDictionary] valueForKey:@"UILaunchImages"];

    for (NSDictionary *dict in imagesDict)
    {
        CGSize imageSize = CGSizeFromString(dict[@"UILaunchImageSize"]);
        if (CGSizeEqualToSize(imageSize, viewSize) && [viewOrientation isEqualToString:dict[@"UILaunchImageOrientation"]])
            return dict[@"UILaunchImageName"];
    }
    return nil;
}

+ (UIImage*)si_splashImageForOrientation:(UIInterfaceOrientation)orientation
{
    NSString *imageName = [self si_splashImageNameForOrientation:orientation];
    UIImage *image = [UIImage imageNamed:imageName];
    return image;
}

@end

imageNamedはイメージをシステムキャッシュにプッシュしますが、起動イメージは非常に大きい場合があるため、キャッシュがフラッシュするまでメモリ内にあります
Igor Palaguta

9

@codemanの回答がSwift 1.2用に更新されました:

func splashImageForOrientation(orientation: UIInterfaceOrientation, size: CGSize) -> String? {
    var viewSize        = size
    var viewOrientation = "Portrait"

    if UIInterfaceOrientationIsLandscape(orientation) {
        viewSize        = CGSizeMake(size.height, size.width)
        viewOrientation = "Landscape"
    }

    if let imagesDict = NSBundle.mainBundle().infoDictionary as? [String: AnyObject] {
        if let imagesArray = imagesDict["UILaunchImages"] as? [[String: String]] {
            for dict in imagesArray {
                if let sizeString = dict["UILaunchImageSize"], let imageOrientation = dict["UILaunchImageOrientation"] {
                    let imageSize = CGSizeFromString(sizeString)
                    if CGSizeEqualToSize(imageSize, viewSize) && viewOrientation == imageOrientation {
                        if let imageName = dict["UILaunchImageName"] {
                            return imageName
                        }
                    }
                }
            }
        }
    }

    return nil

}

それを呼び出し、iOS 8のローテーションをサポートするには:

override func viewWillAppear(animated: Bool) {
    if let img = splashImageForOrientation(UIApplication.sharedApplication().statusBarOrientation, size: self.view.bounds.size) {
        backgroundImage.image = UIImage(named: img)
    }
}

override func viewWillTransitionToSize(size: CGSize, withTransitionCoordinator coordinator: UIViewControllerTransitionCoordinator) {
    let orientation = size.height > size.width ? UIInterfaceOrientation.Portrait : UIInterfaceOrientation.LandscapeLeft

    if let img = splashImageForOrientation(orientation, size: size) {
        backgroundImage.image = UIImage(named: img)
    }

}

必要なものだけ、ありがとう!


7

iPhoneとiPadのスプラッシュ画像の名前を取得する一般的な方法(Landscape、Portrait)を書いたところ、うまくいきました。期待しています。私は他のSOの回答の助けを借りてこれを書きました。リスト全体をありがとう@Pichirichi。

+(NSString*)getLaunchImageName
{

 NSArray* images= @[@"LaunchImage.png", @"LaunchImage@2x.png",@"LaunchImage-700@2x.png",@"LaunchImage-568h@2x.png",@"LaunchImage-700-568h@2x.png",@"LaunchImage-700-Portrait@2x~ipad.png",@"LaunchImage-Portrait@2x~ipad.png",@"LaunchImage-700-Portrait~ipad.png",@"LaunchImage-Portrait~ipad.png",@"LaunchImage-Landscape@2x~ipad.png",@"LaunchImage-700-Landscape@2x~ipad.png",@"LaunchImage-Landscape~ipad.png",@"LaunchImage-700-Landscape~ipad.png"];

UIImage *splashImage;

if ([self isDeviceiPhone])
{
    if ([self isDeviceiPhone4] && [self isDeviceRetina])
    {
        splashImage = [UIImage imageNamed:images[1]];
        if (splashImage.size.width!=0)
            return images[1];
        else
            return images[2];
    }
    else if ([self isDeviceiPhone5])
    {
        splashImage = [UIImage imageNamed:images[1]];
        if (splashImage.size.width!=0)
            return images[3];
        else
            return images[4];
    }
    else
        return images[0]; //Non-retina iPhone
}
else if ([[UIDevice currentDevice] orientation]==UIDeviceOrientationPortrait || [[UIDevice currentDevice] orientation] == UIDeviceOrientationPortraitUpsideDown)//iPad Portrait
{
    if ([self isDeviceRetina])
    {
        splashImage = [UIImage imageNamed:images[5]];
        if (splashImage.size.width!=0)
            return images[5];
        else
            return images[6];
    }
    else
    {
        splashImage = [UIImage imageNamed:images[7]];
        if (splashImage.size.width!=0)
            return images[7];
        else
            return images[8];
    }

}
else
{
    if ([self isDeviceRetina])
    {
        splashImage = [UIImage imageNamed:images[9]];
        if (splashImage.size.width!=0)
            return images[9];
        else
            return images[10];
    }
    else
    {
        splashImage = [UIImage imageNamed:images[11]];
        if (splashImage.size.width!=0)
            return images[11];
        else
            return images[12];
    }
 }
}

他のユーティリティメソッドは

+(BOOL)isDeviceiPhone
{
 if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone)
 {
     return TRUE;
 }

 return FALSE;
}

+(BOOL)isDeviceiPhone4
{
 if ([[UIScreen mainScreen] bounds].size.height==480)
    return TRUE;

 return FALSE;
}


+(BOOL)isDeviceRetina
{
 if ([[UIScreen mainScreen] respondsToSelector:@selector(displayLinkWithTarget:selector:)] &&
    ([UIScreen mainScreen].scale == 2.0))        // Retina display
 {
    return TRUE;
 } 
 else                                          // non-Retina display
 {
     return FALSE;
 }
}


+(BOOL)isDeviceiPhone5
{
 if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone && [[UIScreen mainScreen] bounds].size.height>480)
 {
    return TRUE;
 }
 return FALSE;
}

[[UIScreen mainScreen]境界]今、あなたはiOSの8の下であなたが明示的のようなものをやって肖像画の境界に変換する必要がありますしているどのような方向に基づいて変更されます:isDeviceiPhone4ため、このコードに若干のバグが実際にあります[screen.coordinateSpace convertRect:screen.bounds toCoordinateSpace:screen.fixedCoordinateSpace]が、makeが最初にiOS 8を使用しているかどうかをテストしてください。そうでない場合はクラッシュします。
Mohamed Hafez 2014

それを指摘してくれた@Hafezに感謝します。iOS8でテストし、すぐに回答を更新します。
zaheer 2014

7

Cherpak Evgenyの回答のSwiftバージョン:

    func splashImageForOrientation(orientation: UIInterfaceOrientation) -> String {
        var viewSize = self.view.bounds.size
        var viewOrientation = "Portrait"
        if UIInterfaceOrientationIsLandscape(orientation) {
           viewSize = CGSizeMake(viewSize.height, viewSize.width)
           viewOrientation = "Landscape"
        }
        let imagesDict = NSBundle.mainBundle().infoDictionary as Dictionary<NSObject,AnyObject>!
        let imagesArray = imagesDict["UILaunchImages"] as NSArray
        for dict in imagesArray {
            let dictNSDict = dict as NSDictionary
            let imageSize = CGSizeFromString(dictNSDict["UILaunchImageSize"] as String)
            if CGSizeEqualToSize(imageSize, viewSize) && viewOrientation == (dictNSDict["UILaunchImageOrientation"] as String) {
                return dictNSDict["UILaunchImageName"] as String
            }
        }
        return ""
    }

5

@Pichirichの回答に続いて、InterfaceBuilderで私の起動画像を次のように参照しました。

「LaunchImage.png」

...そしてXcode 5.0.2では、アセットカタログから直接適切な画像を自動的に取得します。

これは私が期待することです-サイレントに "Default.png"を "LaunchImage.png"にリネームするという悪質な厄介な動きを除いて:)


もう1つ注意する必要があります。Appleは(例えばiOSの5-6 iPhone 3GS用LaunchImage用320×480)を推奨していますまったく同じこれらのイメージのサイズは、それ以外の場合は次のようになり、あるべきnil与えられた初期化後
アレクサンダーKostiev

3

ドキュメント明記があります:

「アセットカタログの各セットには名前があります。その名前使用して、セットに含まれる個々の画像をプログラムで読み込むことができます。画像を読み込むには、UIImage:ImageNamedを呼び出しますメソッドを、画像を含むセットの名前を渡します」

ピチリチのリストを使用すると、この矛盾を解決するのに役立ちます。


1
「セットの名前」の部分に注意してください。私のアセットカタログを見ると、「LaunchImage」というセットがあります。起動画像を読み込むために、私は次のように呼びましたUIImageView *myView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"LaunchImage"]];
14

1
Pichirichiのリストを使用する必要はありません(これはまだ知っておくべき素晴らしい情報です)-アセットカタログの「セット」の名前を使用してください。
14

2
まあ、私にとってこれはXcode 6.0.1とiOS 8のLaunch Imageでは機能しません。LaunchImageは、コンパイルされたアプリバンドルで個別に終了し、xcassetバンドルフォルダー内に残っていないため、特別なようです。
auco、2014年

同じ名前のセットを含む2つの異なるアセットカタログがある場合はどうなりますか?どれ[UIImage imageNamed:..]を選ぶべきかをどうやって知るのでしょうか?
Carlos P 14

私にとってはこれは機能しません、XCode 6.0.1 iOS 7 iPod Touch
dev

3

1行のコードでLaunchイメージに簡単にアクセスできます。

 UIImage *myAppsLaunchImage = [UIImage launchImage];

上記の機能を実現するには、以下の手順に従ってください。

手順1.UIImageカテゴリを作成してクラスを拡張し、それに次のメソッドを追加します。

+ (UIImage *)launchImage {
    NSDictionary *dOfLaunchImage = [NSDictionary dictionaryWithObjectsAndKeys:
                                    @"LaunchImage-568h@2x.png",@"568,320,2,8,p", // ios 8 - iphone 5 - portrait
                                    @"LaunchImage-568h@2x.png",@"568,320,2,8,l", // ios 8 - iphone 5 - landscape
                                    @"LaunchImage-700-568h@2x.png",@"568,320,2,7,p", // ios 7 - iphone 5 - portrait
                                    @"LaunchImage-700-568h@2x.png",@"568,320,2,7,l", // ios 7 - iphone 5 - landscape
                                    @"LaunchImage-700-Landscape@2x~ipad.png",@"1024,768,2,7,l", // ios 7 - ipad retina - landscape
                                    @"LaunchImage-700-Landscape~ipad.png",@"1024,768,1,7,l", // ios 7 - ipad regular - landscape
                                    @"LaunchImage-700-Portrait@2x~ipad.png",@"1024,768,2,7,p", // ios 7 - ipad retina - portrait
                                    @"LaunchImage-700-Portrait~ipad.png",@"1024,768,1,7,p", // ios 7 - ipad regular - portrait
                                    @"LaunchImage-700@2x.png",@"480,320,2,7,p", // ios 7 - iphone 4/4s retina - portrait
                                    @"LaunchImage-700@2x.png",@"480,320,2,7,l", // ios 7 - iphone 4/4s retina - landscape
                                    @"LaunchImage-Landscape@2x~ipad.png",@"1024,768,2,8,l", // ios 8 - ipad retina - landscape
                                    @"LaunchImage-Landscape~ipad.png",@"1024,768,1,8,l", // ios 8 - ipad regular - landscape
                                    @"LaunchImage-Portrait@2x~ipad.png",@"1024,768,2,8,p", // ios 8 - ipad retina - portrait
                                    @"LaunchImage-Portrait~ipad.png",@"1024,768,1,8,l", // ios 8 - ipad regular - portrait
                                    @"LaunchImage.png",@"480,320,1,7,p", // ios 6 - iphone 3g/3gs - portrait
                                    @"LaunchImage.png",@"480,320,1,7,l", // ios 6 - iphone 3g/3gs - landscape
                                    @"LaunchImage@2x.png",@"480,320,2,8,p", // ios 6,7,8 - iphone 4/4s - portrait
                                    @"LaunchImage@2x.png",@"480,320,2,8,l", // ios 6,7,8 - iphone 4/4s - landscape
                                    @"LaunchImage-800-667h@2x.png",@"667,375,2,8,p", // ios 8 - iphone 6 - portrait
                                    @"LaunchImage-800-667h@2x.png",@"667,375,2,8,l", // ios 8 - iphone 6 - landscape
                                    @"LaunchImage-800-Portrait-736h@3x.png",@"736,414,3,8,p", // ios 8 - iphone 6 plus - portrait
                                    @"LaunchImage-800-Landscape-736h@3x.png",@"736,414,3,8,l", // ios 8 - iphone 6 plus - landscape
                                    nil];
    NSInteger width = ([UIScreen mainScreen].bounds.size.width>[UIScreen mainScreen].bounds.size.height)?[UIScreen mainScreen].bounds.size.width:[UIScreen mainScreen].bounds.size.height;
    NSInteger height = ([UIScreen mainScreen].bounds.size.width>[UIScreen mainScreen].bounds.size.height)?[UIScreen mainScreen].bounds.size.height:[UIScreen mainScreen].bounds.size.width;
    NSInteger os = [[[[[UIDevice currentDevice] systemVersion] componentsSeparatedByString:@"."] objectAtIndex:0] integerValue];
    NSString *strOrientation = UIDeviceOrientationIsLandscape([[UIDevice currentDevice] orientation])?@"l":@"p";
    NSString *strImageName = [NSString stringWithFormat:@"%li,%li,%li,%li,%@",width,height,(NSInteger)[UIScreen mainScreen].scale,os,strOrientation];
    UIImage *imageToReturn = [UIImage imageNamed:[dOfLaunchImage valueForKey:strImageName]];
    if([strOrientation isEqualToString:@"l"] && [strImageName rangeOfString:@"Landscape"].length==0) {
        imageToReturn = [UIImage rotate:imageToReturn orientation:UIImageOrientationRight];
    }
    return imageToReturn;
}

ステップ2.上記のメソッドは、次のコードを同じカテゴリに追加することで機能するはずですUIImage

static inline double radians (double degrees) {return degrees * M_PI/180;}

+ (UIImage *)rotate:(UIImage*)src orientation:(UIImageOrientation) orientation {
    UIGraphicsBeginImageContext(src.size);
    CGContextRef context = UIGraphicsGetCurrentContext();
    if (orientation == UIImageOrientationRight) {
        CGContextRotateCTM (context, radians(90));
    } else if (orientation == UIImageOrientationLeft) {
        CGContextRotateCTM (context, radians(-90));
    } else if (orientation == UIImageOrientationDown) {
        // NOTHING
    } else if (orientation == UIImageOrientationUp) {
        CGContextRotateCTM (context, radians(90));
    }
    [src drawAtPoint:CGPointMake(0, 0)];
    UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    return image;
}

すばらしい答え、ありがとう!
dortzur 2015

1
iPhone X起動画像の名前は何ですか?
RPM

2

これは必ずしもすべての人にとって最善の解決策ではありませんが、Images.xcassetsカタログに個別のエントリを作成することでこれを行う最も簡単な(そしてエラーが発生しにくい、IMHOの)方法であることがわかります。呼んだSplashImage

新しいエントリを追加するときは、オプションとして「新しい起動画像」を選択しないようにしてください。代わりに、一般的な「新しい画像セット」を選択してください。次に、インスペクターを開いて、関連するオプションを選択します。私のように、Retinaデバイス専用にビルドする場合は、次を選択できます。

画像検査官

これにより、4つのエントリ(iPhone 4S、iPhone 5(s、c)、iPhone 6、およびiPhone 6 Plus)が残ります。

画像

画像に対応するファイルは次のとおりです。

| Resolution (Xcode entry) | Launch Image name   |   Device         |
|--------------------------|---------------------|------------------|
| 1x                       | Default-750.png     | iPhone 6         |
| 2x                       | Default@2x.png      | iPhone 4S        |
| Retina 4 2x              | Default-568h@2x.png | iPhone 5, 5s, 5c |
| 3x                       | Default-1242.png    | iPhone 6 Plus    |

もちろん、これを実行した後は、簡単に使用できます [UIImage imageNamed:@"SplashImage"]


1
興味深いアイデアですが、iPhone 6では機能しません。iPhone6シミュレータでDefault@2x.png画像をロードします。
nonamelive 2014

このアプローチを使用すると、横向きの起動画像のセットにも注意する必要があります。
berec 2014


0

最新のSwift構文に更新(Swift 5)

   func splashImageForOrientation(orientation: UIInterfaceOrientation) -> String? {

    var viewSize = screenSize
    var viewOrientation = "Portrait"
    if orientation.isLandscape {
        viewSize = CGSize(width: viewSize.height, height: viewSize.width)
        viewOrientation = "Landscape"
    }
    if let infoDict = Bundle.main.infoDictionary, let launchImagesArray = infoDict["UILaunchImages"] as? [Any] {
        for launchImage in launchImagesArray {
            if let launchImage = launchImage as? [String: Any], let nameString = launchImage["UILaunchImageName"] as? String, let sizeString = launchImage["UILaunchImageSize"] as? String, let orientationString = launchImage["UILaunchImageOrientation"] as? String {
                let imageSize = NSCoder.cgSize(for: sizeString)
                if imageSize.equalTo(viewSize) && viewOrientation == orientationString {
                    return nameString
                }
            }
        }
    }
    return nil
}
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.