3

我有一个名为 heart.png 的全屏图像加载到 320x480 的 UIImageView 中。我创建了一个 640x960 版本并将其命名为 heart@2x.png。我还创建了一个 640x1136 版本并将其命名为 heart-568h@2x.png。

我在情节提要中构建了一个 3.5" 视图,其 UIImageView 为 320x480。我假设使用 4" 屏幕设备会自动加载 heart-568h@2x.png 但似乎并非如此。我必须为 3.5" 和 4" 屏幕创建 2 个故事板吗?

编辑

到目前为止,一切都在 IB 中完成,没有使用任何代码。这是我刚刚设置的示例项目: 在此处输入图像描述

4

3 回答 3

3

你是对的。设备不会以区分常规和视网膜 (@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 进行缩放):

界面生成器自定义属性

于 2013-06-27T06:25:55.360 回答
1

通过堆栈溢出搜索,我了解到图像不会自动加载名称中带有 -568h 的图像。

于 2012-11-01T22:17:42.100 回答