如何适配iPhone 4屏幕分辨率?

27
根据苹果的说法,iPhone 4拥有全新且更好的屏幕分辨率:

3.5英寸(对角线)宽屏多点触控显示器
960x640像素分辨率,326 ppi

这个小细节对我们的应用程序影响很大。网络上的大多数演示应用程序都有一个共同点:他们把视图定位在屏幕具有固定大小的320 x 480像素的信念中。所以大多数(如果不是全部)开发人员做的就是:他们以这种方式设计了所有内容,使得可触摸区域(例如)为50 x 50像素。刚好足够点击。事物相对于左上角进行位置定位,以达到屏幕上的特定位置——比如中心或底部某处。
当我们开发高分辨率应用程序时,它们可能无法在旧设备上运行。如果可以运行,则会因为任何图像的大小扩大了4倍而导致内存占用过大,必须将其缩小。

虽然我不同意基于主观因素而关闭,但在新手机发布并且人们可以使用它们之前,没有真正的答案。 - NotMe
1
这很傻 - 这个后果非常合乎逻辑。您可以通过将主视图缩小一半并增加两倍大小和高度来轻松模拟它。我试过了,感觉很糟糕。 - dontWatchMyProfile
为什么所有好问题最终都变成了社区维基页面? - Emil
8个回答

15
根据在视图中支持高分辨率屏幕,来自苹果文档:
在高分辨率屏幕设备上,imageNamed:imageWithContentsOfFile:initWithContentsOfFile:方法会自动查找带有@2x修饰符的请求图片版本。如果找到,则加载该图像。如果您没有提供给定图像的高分辨率版本,则图像对象仍会加载标准分辨率图像(如果存在),并在绘制过程中缩放它。
加载图像时,UIImage对象会根据图像文件的后缀自动设置大小和比例属性值。对于标准分辨率图像,它将比例属性设置为1.0,并将图像的大小设置为像素尺寸。对于文件名带有@2x后缀的图像,它将比例属性设置为2.0,并将宽度和高度值减半以补偿比例因素。这些减半的值与您需要在逻辑坐标空间中使用的点数维度正确相对应,以呈现图像。

请注意,无论分辨率如何,UIKit视图都会以正确的比例绘制,这是事实。 自定义图像是一个问题,正如上面所提到的。 (这就是为什么当您可以时,不应使用它们来绘制界面。) - fearmint
3
我理解 "@2x" 是名称的一部分。来自同一份 PDF 的引用:“例如,如果您有两个图像文件,分别命名为 Button.pngButton@2x.png,则可以使用以下代码请求按钮图像: UIImage* anImage = [UIImage imageNamed:@"Button"];" - ohho
iOS3.0怎么办?你能在那里做些什么来在iPhone 4上显示高分辨率的图片?我当然希望我的应用程序看起来很棒,但我也希望使用3.x版本的人能够使用它... - Emil

6

这只是一种猜测,但如果分辨率真的是960 x 640 - 那就是当前版本分辨率的两倍。iPhone可以轻易检查应用程序的构建目标并检测应用程序的旧版本,然后简单地按比例缩放2倍。您永远不会注意到差异。


5

Engadget的主题演讲报道 包括以下史蒂夫·乔布斯的实录:

...这使得你的应用程序可以自动运行在这个设备上,但它会以更高的分辨率呈现你的文本和控件。你的应用程序看起来甚至更好了,但如果你做一点点工作,它们将会看起来令人惊艳。因此,我们建议你这样做。

所以我推断出,如果使用现有的API,你的应用程序将被放大。如果利用新的iOS4 API,你就可以享受新像素带来的所有乐趣。


4

听起来显示器应该没问题,但我担心我的游戏逻辑。touchesBegan位置会返回新分辨率下的点吗?屏幕边界将不同,这些类型的问题可能对我造成困扰。


不,那些东西是用CoreGraphics完成的(我想),它是分辨率无关的。 - Alexsander Akers
不冒任何保密协议的风险,所有的iPhone始终返回点而不是像素。由于SDK 3.2在iPad上使用点,因此我不希望这种情况在未来的iPhone版本中发生改变。 - Jann

3

将显示分辨率扩大到双倍以适应显示目的很简单,但这种缩放是否适用于所有输入/输出屏幕坐标的API?如果不是,那么事情会出问题,对吧?

如果在框架中广泛处理了这个问题,那就没问题了。我想这会影响很多潜在的API。


我猜计算所在的那个点是非常底层的,任何API都是在其上面的。因此,他们可以轻松地从info.plist中读取一个值,以查看应用程序是否为高分辨率,并以适当的方式处理与触摸屏幕或任何绘图操作相关的任何用户交互。至少,当我是iPhone SDK团队负责人时,我会这样做;-) 可是,根据乔布斯的说法,这不会破坏我们的应用程序。如果突然有95%的应用程序不能在他们的新的、超级昂贵的设备上工作,那么iPhone 4的购买者会非常不满意。 - dontWatchMyProfile
如果前瞻性思考融入了设计,那就太好了。不过,如果这一点被忽视了,我也不会感到惊讶。我希望能从拥有 SDK 并能进行测试的人那里得到一些确认,以确定这是否属实。 - Mick N
我担心我们大多数人(美国以外的人)将不得不等很长时间,直到我们能够看到它。除非新的iPhone模拟器能够显示出那个新的分辨率。 - dontWatchMyProfile
iPhone模拟器有三个目标设备:iPad、iPhone和iPhone 4。iPhone 4显示高分辨率(即我必须滚动才能在我的15英寸Macbook pro上看到整个屏幕)。 - Thomas Müller

3

2

是的,这是真的。

根据WWDC的消息,苹果已经建立了某种形式的自动转换,以使应用程序的分辨率不会完全失真。可以将其类比为DVD到高清电视的升频转换。

我猜想,苹果已经了解了大多数标准开发人员一直在使用的技术规范,并将立即使用这些规范进行转换。当然,如果您编写一个应用程序来利用新分辨率,它将比苹果的自动转换效果更好。


3
请记住,如果为所有图形提供4倍大小(即将高度和宽度加倍),所有旧设备都会受到影响,加载巨大文件并将其缩小。 - dontWatchMyProfile
也许,我们不知道苹果是否会像区分 iPhone 和 iPad 应用程序一样区分 iPhone 4 应用程序和旧版 iPhone 应用程序。如果某些应用程序专门为 iPhone 4 设计,则可能无法在旧版本上使用。 - Kavet Kerek
以前的版本无法处理这个问题,对那些老旧设备使用高分辨率图形会很愚蠢,因此需要一个有意义的解决方案。 - dontWatchMyProfile
如果您需要将二进制文件与所有额外的图形捆绑在一起,那仍然是一个让人沮丧的问题。1 MB 的 PNG 文件会变成 5 MB 的 PNG 文件。 - RickiG

2
你的所有标签和系统按钮将以326dpi的分辨率显示,但是在添加高分辨率资源之前,你的图像仍然会被像素加倍。我正在更新我的应用程序。如果你在iPhone 4模拟器上构建并运行,则以50%呈现,转到窗口 > 缩放 > 100%以查看真正的差异!标签很平滑,但我的图像看起来很模糊!

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接