我有一个名为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中完成,没有使用任何代码。这是我刚刚设置的示例项目:
答案 0 :(得分:3)
你是对的。设备不会以区分常规和视网膜(@ 2x)的方式自动加载568图像(启动图像除外)。您必须以编程方式检查或使用单独的故事板/ NIB。
if(UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone) {
CGSize screenSize = [[UIScreen mainScreen] bounds].size;
if(screenSize.height == 568) {
// ...
}
}
答案 1 :(得分:2)
我构建了我自己的Custom 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进行缩放):
答案 2 :(得分:1)
通过堆栈溢出搜索,我了解到图像不会自动加载名称中包含-568h的图像。