iPhone:我是否必须为所有图像提供视网膜和非视网膜的图像?

时间:2012-06-29 05:00:35

标签: iphone ios retina-display

我听说您需要为视网膜和非视网膜创建图像 并且你需要将它们命名为image@2x.png用于retina,将image.png命名为非视网膜。

但是我想用image.png来治疗视网膜和非视网膜 并在程序中缩小它,因为通过代码调整图像大小比使用绘画工具重新创建图像更容易
可以使用以下代码执行此操作:

[button setImage:[UIImage imageNamed:@"image.png"] forState:UIControlStateNormal];


UIImageView *imageView = [[UIImageView alloc] init];
imageView.frame = CGRectMake(20, 20, 40, 40);
imageView.image = [UIImage imageNamed:@"image.png"];

image.png缩小为按钮大小或图像视图大小。

这是一种常见的方式吗? 这种方式有什么缺点吗? 如果应用程序没有image.png和image@2x.png,苹果会拒绝吗?

3 个答案:

答案 0 :(得分:3)

[EDIT1 - 特殊情况]

然而,这个问题有一个特殊情况。由于Apple当前的2x算法基本上是一个像素加倍(在每个方向上),如果你的图像只由垂直和水平线组成,那么我会提供这些图像为1x并让API自动升级那些,示例将是一个看起来像这样的按钮的图像

enter image description here

因为这将是零问题升级,仍然看起来非常清脆! (在iPhone和iPad上测试过)

<强> [原稿] 如果你只是为了显示它,那么一种方法是简单地提供仅适用于视网膜的图像,并允许UIImageView自动缩小图像以用于非视网膜显示。它会这样做,不会被苹果拒绝。

对于视网膜显示器,UIImageView将自然占据每个方向2倍像素的空间,因此当读入图像以在视网膜显示器上显示时,API将识别出不需要进行缩放! !

虽然小心!!!缩小图像可以说按钮可以产生使图像或按钮看起来不干净/像素化的效果。这就是为什么“推荐”提供两者的原因,比如说基于矢量的图像,您将能够为给定的分辨率生成最高质量的图像。有点取决于你想如何使用图像。

作为旁注。我建议如果您确实选择了调整大小选项,那么您尝试先识别设备的屏幕分辨率,并在初始化到按钮或UIImageView等时仅调整图像大小(如果需要,我的情况下为SMALLER分辨率)。 ..因此,每次需要渲染到屏幕时,您都不会遭受较慢的性能。

答案 1 :(得分:1)

嗯,您可能不想听到这个,但最好使用绘画工具。如果您每次都让设备调整图像大小,它会降低您的应用程序速度 - 具体取决于您执行此任务的频率。我不认为苹果会因为不包括@ 2x图像而拒绝你。我之前忘记了他们没有任何问题。

答案 2 :(得分:0)

如果您不想包含@ 2x图像,那么您的应用程序将同时适用于视网膜和非视网膜iphone。 Apple不会拒绝你的二进制文件。
唯一的缺点是视网膜不是高质量的图像,而是显示正常的图像。