我知道之前已经提出了类似的问题,但我真的处境艰难。
我正在构建一个想要在 iPhone 3G , iPhone 4 和 iPhone 5 上工作的应用。
我是iOS开发的初学者,直到现在,我已经编写了大量的UI代码,这些代码可以在iPhone模拟器上运行。我专注于通用语言和SDK功能,以便了解一般的iOS开发,因此大多数情况下忽略了模拟器为我提供的任何解决方案支持。
现在,我在这些不同的iPhone版本中面临着可移植性的要求,我感到非常困惑。首先让我告诉我对iPhone 3和iPhone 4屏幕支持细节的了解,请纠正我,如果我做错了(暂时忽略了iPhone 5):
系统采用基于 320x480 POINT 的查看区域。在iPhone 3中,实际屏幕尺寸相同,但iPhone 4使用实际 640x960像素尺寸的屏幕。
我们根据 320x480 尺寸编码并生成视图。我们提供正常分辨率图像(例如100x100大小的some_image.png)和带有“@ 2x”后缀的高分辨率版本。 ( 200x200 -sized some_image@2x.png )在同一个应用包中。
调用UIKit
图像加载方法时,例如UIImage
或UIImageView
,系统会选择正确版本的图像并加载它们,根据当前设备(iPhone 3或iPhone 4)。
到目前为止,为了支持低分辨率和高分辨率 iPhone 3G 和 iPhone 4 ,我谨慎地提供这三个步骤。
假设我的图片大小 100x100 ,我将在UIImage
个对象中使用。我也提供 200x200 高分辨率版本,我认为这适用于带有“@ 2x”后缀的iPhone 4和iPhone 5。
但是,假设我有一个大小 320x480 的背景图片,涵盖整个背景,我提供 640x960 版本“@ 2x”后缀也是如此。
但是在尺寸为 640x1136 的iPhone 5屏幕上会发生什么?我应该准备iPhone5分辨率图像并以if(IPHONE5 == true)
条件加载吗?
处理此问题的正确方法是什么?
答案 0 :(得分: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。