3

320x480 の UIImageView に読み込まれた heart.png というフルスクリーン画像があります。640x960 バージョンを作成し、heart@2x.png という名前を付けました。また、640x1136 バージョンを作成し、heart-568h@2x.png という名前を付けました。

320x480 の UIImageView を使用して、ストーリーボードに 3.5 インチのビューを作成しました。4 インチの画面デバイスを使用すると、自動的に heart-568h@2x.png が読み込まれると思いますが、そうではないようです。3.5 インチと 4 インチのスクリーン用に 2 つのストーリーボードを作成する必要がありますか?

編集

これまでのところ、すべてが IB で行われており、コードは使用されていません。ここに私が設定したサンプルプロジェクトがあります: ここに画像の説明を入力

4

3 に答える 3

3

あなたは正しいです。デバイスは、通常のイメージと Retina (@2x) を区別する方法で、568 イメージ (起動イメージ以外) を自動的にロードしません。プログラムで確認するか、別のストーリーボード / NIB を使用する必要があります。

if(UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone) {
        CGSize screenSize = [[UIScreen mainScreen] bounds].size;
        if(screenSize.height == 568) {
           // ...
        }
}
于 2012-11-01T22:21:42.653 に答える
2

次のように独自のカスタム ImageView クラスを作成しました。

//  UICustomImageView.h
@interface UICustomImageView : UIImageView
@property (nonatomic) NSString *filename568;
@end

//  UICustomImageView.m
#import "UICustomImageView.h"

@implementation UICustomImageView

- (void)awakeFromNib {
    [super awakeFromNib];

    [self checkFor568];
}

-(void)drawRect:(CGRect)rect {
    [super drawRect:rect];

    [self checkFor568];
}

-(void)checkFor568 {
    if(UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone) {
        CGSize screenSize = [[UIScreen mainScreen] bounds].size;
        if(screenSize.height == 568) {
            if (self.filename568 != nil)
                self.image = [UIImage imageNamed:self.filename568];
        }
    }
}

@end

このように Interface Builder で使用します。(スケーリングのために画像に Background-568h@2x.png という名前を付けます):

Interface Builder カスタム属性

于 2013-06-27T06:25:55.360 に答える
1

スタック オーバーフローを検索すると、名前に -568h が含まれるイメージが自動的にロードされないことがわかりました。

于 2012-11-01T22:17:42.100 に答える