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

标签 iphone ios retina-display

我听说您需要为视网膜和非视网膜创建图像。
你需要将它们命名为 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 被缩小为按钮大小或 ImageView 大小。

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

最佳答案

[EDIT1 - 特例]

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

enter image description here

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

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

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

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

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

关于iPhone:我是否必须为所有图像同时提供视网膜和非视网膜图像?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11256285/

相关文章:

ios - iPhone 上的 OpenGL ES 可能存在 Retina 问题?

iphone - 在iPhone中哪里使用scrollToRowAtIndexPath?

iphone - 如何使用 OpenGL ES 2.0 旋转对象?

ios - 是否有人能够在 iOS 上使用 Address-Sanitizer(称为 asan 或 -fsanitize=address)?

ios - 如何制作没有 xib 或 Storyboard vc 标识符的 View Controller ?

objective-c - 视网膜显示器的矩形尺寸是多少?

iphone - 如何从我们的服务器中找到是否已发送给用户的 Apple Push Notification?

iphone - 无法设置 CCLabelTTF anchor

iphone - 无法将iPhone设备连接到XCode

html - @2x 视网膜图像不适用于 iOS7