目标C语言 图像分辨率支持iPhone 3G, iPhone 4和iPhone 5



我知道以前也有人问过类似的问题,但我的处境真的很糟糕。

我正在构建一个应用程序,这是想在iPhone 3GiPhone 4iPhone 5上工作。

我是iOS开发的初学者,直到现在,我已经写了大量的UI代码,只在iPhone模拟器上工作。为了了解一般的iOS开发,我专注于通用语言和SDK功能,因此基本上忽略了模拟器提供给我的任何分辨率支持。

现在,我面临着不同iPhone版本之间的可移植性要求,我很困惑。首先让我告诉我所知道的关于iPhone 3和iPhone 4屏幕支持的细节,如果我做错了什么请纠正我(完全忽略iPhone 5,目前):

  1. 系统假设一个320x480点为基础的观察区域。在iPhone 3中,实际的屏幕尺寸是相同的,但iPhone 4使用了一个实际的640x960像素的屏幕。

  2. 我们根据320x480的大小来编码和生成视图。我们提供正常分辨率的图像(例如100x100大小的some_image.png)和带有"@2x"后缀的高分辨率版本。(200x200-size some_image@2x.png)在同一个app bundle中

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

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

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

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

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

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

需要处理的几个问题:

  1. 一个"全屏"/背景图像/其他图像,旨在匹配屏幕的长宽比
  2. 与屏幕宽高比无关的图像

在#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。

最新更新