0

我正在开发一个壁纸应用程序,专为视​​网膜显示屏 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”文件?

更新

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

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

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

4

3 回答 3

1

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

于 2013-09-12T08:49:56.510 回答
1

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

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

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

[UIImage imageNamed:@"legends"];
于 2013-09-12T08:50:07.870 回答
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"];
        }
}
于 2013-09-12T10:46:05.970 回答