3

我听说您需要为视网膜和非视网膜创建图像。
您需要将它们命名为 image@2x.png 用于视网膜,而 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,苹果会拒绝吗?

4

3 回答 3

3

[EDIT1 - 特殊情况]

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

在此处输入图像描述

因为这将有零问题升级并且仍然看起来非常清晰!!!(在两部 iPhone 和两部 iPad 上测试)

[原创] 如果您只是为了显示而这样做,那么一种方法是简单地提供图像,因为它应该只用于视网膜,并允许 UIImageView 自动缩小图像以用于非视网膜显示器。它会这样做,不会被苹果拒绝。

对于retina显示,UIImageView自然会在每个方向上占据2x像素的空间,因此当图像被读入Retina显示时,API会识别出不需要缩放!!!

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

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

于 2012-06-29T05:11:00.967 回答
1

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

于 2012-06-29T05:10:02.040 回答
0

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

于 2012-06-29T05:08:02.753 回答