支持iPhone 3G,iPhone 4和iPhone 5的图像分辨率

时间:2012-12-25 17:24:26

标签: objective-c ios uikit screen-resolution iphone-5

我知道之前已经提出了类似的问题,但我真的处境艰难。

我正在构建一个想要在 iPhone 3G iPhone 4 iPhone 5 上工作的应用。

我是iOS开发的初学者,直到现在,我已经编写了大量的UI代码,这些代码可以在iPhone模拟器上运行。我专注于通用语言和SDK功能,以便了解一般的iOS开发,因此大多数情况下忽略了模拟器为我提供的任何解决方案支持。

现在,我在这些不同的iPhone版本中面临着可移植性的要求,我感到非常困惑。首先让我告诉我对iPhone 3和iPhone 4屏幕支持细节的了解,请纠正我,如果我做错了(暂时忽略了iPhone 5):

  1. 系统采用基于 320x480 POINT 的查看区域。在iPhone 3中,实际屏幕尺寸相同,但iPhone 4使用实际 640x960像素尺寸的屏幕。

  2. 我们根据 320x480 尺寸编码并生成视图。我们提供正常分辨率图像(例如100x100大小的some_image.png)和带有“@ 2x”后缀的高分辨率版本。 ( 200x200 -sized some_image@2x.png )在同一个应用包中。

  3. 调用UIKit图像加载方法时,例如UIImageUIImageView,系统会选择正确版本的图像并加载它们,根据当前设备(iPhone 3或iPhone 4)。

  4. 到目前为止,为了支持低分辨率和高分辨率 iPhone 3G iPhone 4 ,我谨慎地提供这三个步骤。

    假设我的图片大小 100x100 ,我将在UIImage个对象中使用。我也提供 200x200 高分辨率版本,我认为这适用于带有“@ 2x”后缀的iPhone 4和iPhone 5。

    但是,假设我有一个大小 320x480 的背景图片,涵盖整个背景,我提供 640x960 版本“@ 2x”后缀也是如此。

    但是在尺寸为 640x1136 的iPhone 5屏幕上会发生什么?我应该准备iPhone5分辨率图像并以if(IPHONE5 == true)条件加载吗?

    处理此问题的正确方法是什么?

1 个答案:

答案 0 :(得分:2)

您需要处理的几个问题:

  1. “全屏”/背景图像/旨在匹配屏幕宽高比的其他图像
  2. 与屏幕宽高比无关的图像
  3. 在#1的情况下,您需要提供具有不同分辨率的相同/相似图像。一个适合320x480像素的设备,一个适用于带有@ 2x的视网膜显示器(640x960像素),第三个适合iPhone 5显示器(如果它是通用应用程序,则可能是单独的iPad图像)。

    不幸的是,iOS没有为iPhone 5显示器提供类似@ 2x命名的任何内容。一个常见的约定似乎是在文件名中包含@ 568h,但iOS不会自动使用它。解决方案是确定显示器是否是iPhone以及它是否是更高的显示器。以下代码段将允许您执行此操作:

    // Is it an iPhone with the tall screen?
    if ([[ UIScreen mainScreen ] bounds ].size.height == 568.))
    
        // use the tall image
        image = [UIImage imageNamed:@"myImage@568h.png"
    
    else {
    
        // use 'default' image (will use myimage@2x.png if iPhone retina, 
        // myImage~ipad.png if iPad, myImage~ipad@2x.png if iPad retina)
        image = [UIImage imageNamed:@"myImage.png"
    }
    

    对于#2,由于您可能希望100px x 100px在所有设备上显示为正方形,因此您只需提供100px x 100px和200px x 200px图像,后者的文件名为@ 2x。