2012-06-29 43 views
3

我听说你需要为视网膜和非视网膜创建图像。
而你需要将它们命名为[email protected]用于视网膜和image.png用于非视网膜。iPhone:我是否必须为所有图像都有图像的视网膜和非视网膜?

但我想要使用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和[email protected],苹果是否会拒绝?

回答

3

[EDIT1 - 特殊]

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

enter image description here

因为这将对零个问题的升频和还在寻找很脆! (测试两种​​iPhone手机,以及两者的iPad)

[原文] 如果你只是在做它的显示,然后一个办法是简单地提供图像,因为它应该只对视网膜,并允许UIImageView为非视网膜显示自动缩小图像。它会这样做,不会被苹果拒绝。

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

虽然要小心!缩小图像可以说对于按钮可以具有使图像或按钮看起来不清洁/像素化的效果。这就是为什么它被“推荐”提供这两种功能,是让我们说一个基于矢量的图像,您将能够为给定的分辨率生成最高质量的图像。有点取决于你想如何使用图像。

作为一个侧面说明。我建议如果你确实选择了调整大小选项,那么你只能在初始化的时候尝试识别设备的屏幕分辨率,然后调整图像的大小(如果需要,对于SMALLER分辨率),只需要一次,即可按下按钮或UIImageView等。 ..这样你就不会在每次需要渲染到屏幕时都受到较慢的性能影响。

+0

上述缩放图像可用于实际图像与特殊情况是我在从网上获取UITableView的缩略图时使用的。 Web服务将它们缩放到视网膜分辨率,当它们到达我时,我识别屏幕分辨率,然后在将UIImage存储到桌面上的UIImageView之前再将图像缩小到1x分辨率(如果不是视网膜)。这为这两种情况提供了最佳的潜在解决方案,并且仍然保持尽可能好的速度,不会有任何阻力! – trumpetlicks

+0

感谢您提供有用的建议和有用的信息。 我将只创建具有x2像素的'image.png'。 –

+0

对不起,ping一个旧线程。所以基本上,如果我想显示例如我得到的400x400的Twitter头像,只需将UIImageView的框架调整为200x200,就可以使其在视网膜和非视网膜显示器中看起来很好,不是吗? –

0

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

+4

这是正确的。您可以提供2x图像(文件名中不包含@ 2x),并且API将降低分辨率,您不必提供1x图像和高档图像。但无论哪种方式都可能有不必要的文物。 – trumpetlicks

+0

@trumpetlicks我没有说你不能使用更大的图像,天气是2x 3x 4x,但是如果你使用'@ 2x'后缀然后不提供1x图像,那么你的应用程序将显示图像。确实,使用不带'@ 2x'后缀的较大图像将使您的应用能够在视网膜/非视网膜设备上运行,但当您在非视网膜设备中使用较大图像时,它可能会影响性能。 –

1

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

相关问题