为什么我的视网膜显示特定图像显示比屏幕大?

时间:2013-09-12 08:37:01

标签: iphone ios objective-c uiimageview

我正在开发一款专为视网膜显示iPhone制作的壁纸应用程序。我有一个640 x 960像素大小的图像legends.jpg,我希望在视图中显示,作为预览。这是loadView中的代码:

- (void)loadView
{

    // Init the main view first.
    UIView *wallpaperContainerView = [[UIView alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
    UIImage *wallpaper = [UIImage imageNamed:@"legends.jpg"];

    UIImageView *wallpaperView = [[UIImageView alloc] initWithImage:wallpaper];

    [wallpaperContainerView addSubview:wallpaperView];

    [self setView:wallpaperContainerView]; 
}

我的问题是:

  1. 当我在模拟器(iPhone Retina 3.5英寸)上运行时,图像看起来比整个屏幕大,只显示它的左上部分。为什么会这样,当3.5英寸iPhone分辨率为640x960时,与我的图像尺寸类似?我应该在代码中添加什么才能使图像适合屏幕?
  2. 如果我定位视网膜显示iPhone,我应该使用“@ 2x”附加所有图片文件名并省略非“@ 2x”文件吗?
  3. 更新

    感谢下面的建议,我创建了legends.png(非视网膜)和legends@2x.png文件。然后,我将*wallpaper初始化修改为:

    UIImage *wallpaper = [UIImage imageNamed:@"legends"];
    

    完全解决了我的第一个问题。所以显然使用JPG导致这种缩放混乱,而使用PNG一切正常。

3 个答案:

答案 0 :(得分:1)

iPhone Retina屏幕为3.5英寸,但其分辨率是非视网膜屏幕的两倍。因此,您必须包含用于支持视网膜和非视网膜显示的图像资源。 Retina资源图像名称应具有后缀@ 2x。所以包括320x480(非视网膜)和640x960(视网膜)分辨率的图像,你的问题将会解决。

答案 1 :(得分:1)

您应该始终在图像的Retina版本的文件名中使用@ 2x。

顺便说一句,尝试始终使用PNG格式,因为您将来不必费心使用文件扩展名。

例如,如果您有2个文件(正常和带有后缀@ 2x.png的Retina),您可以简单地写一下:

[UIImage imageNamed:@"legends"];

答案 2 :(得分:1)

不要忘记管理高度为568的 Iphone 5屏幕

这可以很方便:

#define IS_PHONEPOD5() ([UIScreen mainScreen].bounds.size.height == 568.0f && 
[UIScreen mainScreen].scale == 2.f &&
 UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone)

- (void)viewDidLoad
{
    [super viewDidLoad];

        if(IS_PHONEPOD5())
        {
                self.imageView.image = [UIImage imageNamed:@"image-568h@2x"];
        }
        else
        {
                self.imageView.image = [UIImage imageNamed:@"image"];
        }
}