1

我知道以前也有人问过类似的问题,但我真的处于可怕的境地。

我正在构建一个想要在iPhone 3GiPhone 4iPhone 5上运行的应用程序。

我是 iOS 开发的初学者,直到现在,我已经编写了大量仅适用于 iPhone 模拟器的 UI 代码。我专注于通用语言和 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大小的 some_image@2x.png)都在同一个应用程序包中。

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

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

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

但是假设我有一个覆盖整个背景的320x480大小的背景图像,并且我还提供了带有“@2x”后缀的640x960版本。

但是在大小为640x1136的 iPhone 5 屏幕上会发生什么呢?我应该准备一个 iPhone5 分辨率的图像并在有条件的情况下加载它if(IPHONE5 == true)吗?

处理这个的正确方法是什么?

4

1 回答 1

2

您需要处理的几个问题:

  1. 旨在匹配屏幕纵横比的“全屏”/背景图像/其他图像
  2. 与屏幕纵横比无关的图像

在 #1 的情况下,您将希望提供具有不同分辨率的相同/相似图像。一个适合 320x480 像素设备,一个用于视网膜显示器(640x960 像素),@2x,第三个适合 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。

于 2012-12-25T20:50:51.707 回答