【问题标题】:Image resolution support for iPhone 3G, iPhone 4 and iPhone 5图像分辨率支持 iPhone 3G、iPhone 4 和 iPhone 5
【发布时间】:2012-12-25 17:24:26
【问题描述】:

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

我正在构建一个希望在 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 的背景图片,覆盖整个背景,我提供 640x960 版本的 "@2x" strong> 后缀也是如此。

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

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

【问题讨论】:

    标签: objective-c ios uikit screen-resolution iphone-5


    【解决方案1】:

    你需要处理的几个问题:

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

    在 #1 的情况下,您需要提供具有不同分辨率的相同/相似图像。一个适合 320x480 像素设备,一个用于视网膜显示器(640x960 像素),@2x,第三个适合 iPhone 5 显示器(如果它是通用应用程序,可能还有单独的 iPad 图像)。

    不幸的是,iOS 没有为 iPhone 5 显示器提供类似 @2x 命名的任何东西。一个常见的约定似乎是在文件名中包含@568h,但 iOS 不会自动使用它。解决方法是判断显示器是否为 iPhone 以及是否为更高的显示器。以下代码 sn -p 将允许您执行此操作:

    // 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。

    【讨论】:

    • 感谢您的回答。看来我们需要存储 3 个不同版本的长宽比相关图像。如果我们的应用使用具有不同背景的许多不同视图,这不会造成内存负载吗?
    • 应用程序包/apk 文件将更大(并且下载量更大),需要更多设备存储空间。在运行时,它只会将其中一张图像加载到内存中。如果通过“具有不同背景的不同视图”只有可见视图需要将其背景图像加载到内存中,而iOS通常会在资源不足时卸载它不需要的图像。
    猜你喜欢
    • 1970-01-01
    • 2023-04-01
    • 2023-03-31
    • 2013-01-22
    • 1970-01-01
    • 1970-01-01
    • 2016-03-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多