【问题标题】:How to accommodate for the iPhone 4 screen resolution?如何适应 iPhone 4 的屏幕分辨率?
【发布时间】:2011-02-28 20:37:24
【问题描述】:

Apple报道,iPhone 4 有了新的更好的屏幕分辨率:

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

这个小细节严重影响了我们的应用程序。网络上的大多数演示应用程序都有一个共同点:它们定位视图时认为屏幕具有固定的 320 x 480 像素大小。所以大多数(如果不是全部)开发人员所做的是:他们以这样的方式设计所有东西,即可触摸区域(例如)50 x 50 像素大。只需轻按即可。事物已相对于左上角定位,以到达屏幕上的特定位置 - 比如说中心,或者底部的某个位置。

当我们开发高分辨率应用时,它们可能无法在旧设备上运行。如果他们这样做,他们将遭受任何图像大小的 4 倍的影响,不得不在内存中按比例缩小它们。

【问题讨论】:

  • 虽然基于主观我不同意关闭,但在新手机发布并且人们可以使用它们之前,没有办法真正回答这个问题。
  • 这很愚蠢 - 这样做的结果是非常合乎逻辑的。您可以通过将主视图转换为一半大小和高度,同时将其大小和高度加倍来轻松模拟。我做到了,而且很糟糕。
  • 为什么所有好的问题最终都会成为社区 wiki 的?

标签: iphone screen-resolution


【解决方案1】:

根据Supporting High-Resolution Screens In Views,来自 Apple 文档:

在具有高分辨率屏幕的设备上,imageNamed:imageWithContentsOfFile:,和 initWithContentsOfFile: 方法 自动寻找一个版本 带有@2x 的请求图像 名称中的修饰符。如果找到一个, 它会加载该图像。如果你这样做 不提供高分辨率版本 给定图像的图像对象 仍然加载标准分辨率 图像(如果存在)并缩放它 在绘图期间。

当它加载图像时,UIImage 对象会自动设置大小和 将属性缩放到适当的值 基于图像文件的后缀。 对于标准分辨率图像,它 将 scale 属性设置为 1.0 和 将图像的大小设置为 图像的像素尺寸。对于图像 文件名中带有@2x 后缀, 它将 scale 属性设置为 2.0 和 将宽度和高度值减半 补偿比例因子。这些 减半的值与 您需要的基于点的尺寸 在逻辑坐标空间中使用 渲染图像。

【讨论】:

  • 请注意,无论分辨率如何,UIKit 视图都是以正确的比例绘制的,事实上。如上所述,自定义图像值得关注。 (这就是为什么你不应该尽可能使用它们来绘制你的界面。)
  • @mystify,我的理解 @2x 是名称的一部分。引用同一个 pdf 文件,“例如,如果您有两个图像文件,分别名为 Button.pngButton@2x.png,您将使用以下代码来请求您的按钮图像:UIImage* anImage = [UIImage imageNamed:@"Button"];
  • iOS3.0呢?你可以在那里做什么来在 iPhone 4 上显示高分辨率图像?我当然希望我的应用看起来很棒,但我也希望拥有 3.x 的人能够使用它...
【解决方案2】:

这纯粹是推测,但如果分辨率真的是 960 x 640 - 那就是当前版本分辨率的两倍。 iPhone 检查应用程序构建目标并检测应用程序的旧版本并简单地将其缩放 2 会非常简单。您永远不会注意到差异。

【讨论】:

    【解决方案3】:

    Engadget's reporting of the keynote 包含了史蒂夫乔布斯的以下成绩单

    ...它使您的应用程序运行 自动在此,但它呈现 您的文本和控件在较高 解决。您的应用看起来很均匀 更好,但如果你做一点 工作,那么他们会看起来很棒。所以 我们建议您这样做

    因此我推断,如果您使用现有的 API,您的应用程序将得到扩展。如果您利用新的 iOS4 API,您可以使用新的像素获得所有精彩。

    【讨论】:

      【解决方案4】:

      听起来显示会正常,但我担心我的游戏中的逻辑。 touchesBegan 位置会在新分辨率中返回点吗?屏幕边界会有所不同,这些类型的东西对我来说可能是个问题。

      【讨论】:

      • 没有。这些东西是用CoreGraphics(我认为)完成的,它与分辨率无关。
      • 在不冒任何 NDA 问题的风险的情况下,所有 iPhone 始终返回积分,而不是像素。由于用于 iPad 的 SDK 3.2 中使用了积分,因此我预计未来 iPhone 版本不会改变。
      【解决方案5】:

      为了显示目的缩放到双倍分辨率是直截了当的,但是这种缩放是否适用于所有输入/输出屏幕坐标的 api?如果不是,事情就会破裂,不是吗?

      如果它在整个框架中得到广泛处理就足够了。我想有很多潜在的 api 的这种效果。

      【讨论】:

      • 我猜计算完成的点太低了,任何 API 都在此之上。因此他们可以轻松地从 info.plist 中读取一个值,以查看应用程序是否为高分辨率,然后以适当的方式处理与触摸屏的任何用户交互或任何绘图操作。好吧,至少这就是我在担任 iPhone SDK 团队负责人时会做的事情 ;-) ...根据乔布斯的说法,这不会破坏我们的应用程序。如果突然间 95% 的应用程序无法在他们超贵的新设备上运行,iPhone 4 购买者会非常讨厌它。
      • 如果设计中有前瞻性思维,那就太好了。如果忽略这一点,我不会感到惊讶。我想我希望能从可以测试它的 sdk 的人那里找到一些确认。
      • 我担心我们大多数人,在美国以外的地方,将不得不等待很长时间才能看到它。除非新的 iPhone 模拟器能够显示新的结果。
      • iPhone 模拟器有 3 个目标设备:iPad、iPhone 和 iPhone 4。iPhone 4 显示高分辨率(即我必须滚动才能在我的 15'' Macbook pro 上看到整个屏幕)跨度>
      【解决方案6】:

      对于来此线程寻找移动 Web 界面解决方案的人,请查看 Webkit 博客上的这篇文章:http://webkit.org/blog/55/high-dpi-web-sites/

      Webkit 好像四年前就解决了这个问题。

      【讨论】:

        【解决方案7】:

        是的,这是真的。

        根据 WWDC 的说法,苹果似乎已经构建了某种形式的自动转换,这样应用程序的分辨率就不会完全关闭。考虑将 dvd 上转换为 HDTV。

        我的猜测是,Apple 知道大多数标准开发人员一直在使用什么,并且已经使用这些标准进行即时转换。当然,如果您正在编写应用程序以利用新分辨率,它看起来会比苹果自动转换的结果要好得多。

        【讨论】:

        • 但请记住,为所有图形提供 4 倍的大小(即当您将高度和宽度加倍时),所有旧设备都会遭受重创,加载巨大的文件并缩小它们。
        • 也许,我们不知道苹果是否会像区分 iphone 和 ipad 应用程序那样区分 iphone 4 应用程序和旧版 iphone 应用程序。如果某些东西是为 iphone 4 明确设计的,那么它们可能不适用于以前的版本。
        • 这是有道理的。以前的版本无法处理这个问题,而且伤害那些必须缩小尺寸的高分辨率图形的弱老设备是愚蠢的。
        • 如果您需要将二进制文件与所有额外的图形捆绑在一起,这仍然是一个令人沮丧的事情。 1 MB 的 png 将变成 5 MB 的 png。
        【解决方案8】:

        您的所有标签和系统按钮都将采用 326dpi,但在您添加高分辨率资源之前,您的图像仍将像素翻倍。我目前正在更新我的应用程序。如果您在 iPhone 4 sim 上构建并运行,那么它会显示为 50%,请转到 Window > Scale > 100% 以查看真正的差异!标签很光滑,我的图像看起来很震撼!

        【讨论】:

          猜你喜欢
          • 2017-02-11
          • 2016-06-28
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多