【问题标题】:iPad 3 Retina Display, @2x images, and apps already in the storeiPad 3 Retina 显示屏、@2x 图像和商店中已有的应用程序
【发布时间】:2012-02-21 03:31:50
【问题描述】:

因此,未来的某些 iPad 可能会配备 Retina Display。苹果很可能会去stick to the @2x paradigm。我期待这一点已经有一段时间了,所以我的应用程序中已经有@2x 的 iPad 艺术品;有些已经在应用商店中。

我的问题是:当这款神话般的 iPad 发布后,我是否需要重新编译和/或重新提交应用程序才能使用上述艺术作品才能利用这些文件?或者这是操作系统本身内置的东西,它应该自动使用它们?

(由于之前发生过同样的事情,在 iPhone-4 之前的 SDK 下发布的应用程序碰巧有正确的艺术作品吗?它们是否正常工作?)

【问题讨论】:

  • 我认为没有任何 iPhone-4 之前的应用恰好有正确的艺术作品......
  • 果然有人知道这是否正确吗?

标签: ipad retina-display


【解决方案1】:

我今天用 Retina iPad 进行了实验,结果似乎如下:

  • 如果应用程序是使用相当新的 Xcode(可能是 4.2+)编译的,则使用 @2x 图像,就像 iPhone 4 推出时一样。
  • 如果应用程序是使用 Xcode 3 编译的,@2x 图像将不使用,即使存在。 (例如,在支持 iphone-4 的混合应用程序中。)

(我们有许多基于 XCode-3 的项目,其中许多是针对视网膜 iPhone 的混合项目。它们都没有在新 ipad 上使用 @2x 图形。当我在 Xcode 3 和 Xcode 中编译测试项目时4,4构建使用了retina资源,而3构建没有。进一步的实验表明差异被编译到可执行文件本身,所以它不仅仅是一个info.plist的调整,就像我希望的那样。)

[eta.: 我的假设是,使用早期的 SDK 编译会在运行时将您链接到不同版本的 UIKit。当我更新我们的代码时,行为上的奇怪差异似乎证明了这一点。如果有人知道咒语肯定知道,请发表评论。]

[再次编辑添加:还有一些笔尖差异。在我重新保存 MainWindow.nib 之前,在 xcode 4 中打开的旧项目不会使用 @2x 图形;然后它贯穿始终,没有其他变化。我怀疑 UIWindow 对象的隐藏属性。]

【讨论】:

  • 这不是好消息,但我有同样的经历,至少在使用 Xcode3 编译时没有使用 @2x 图像的部分。我还没有尝试过 Xcode 4。感谢发帖,至少我知道我没有疯。
  • 哇,答案很详细。谢谢!
【解决方案2】:

使用在 Snow Leopard 上运行的 XCode 4.2 (iOS SDK 5.0) 构建时发现如下:

在您的代码中使用 [UIImage imagedNamed:] 以编程方式加载的图像将在视网膜 iPad 上正确加载视网膜 @2x 图像。

在 Interface Builder XIB 文件中的按钮和视图上指定的图像通常无法正确加载 @2x 视网膜图像。

我发现的解决方法是通过在视图控制器的(或适当的)initWithNibName:(NSString *) bundle:(NSBundle *) 中使用 [UIImage imagedNamed:] 调用来强制 UIImage 缓存 XIB 中引用的每个图像。编程方法可以很好地进行@2x 加载,系统会将其缓存起来,XIB 加载机制最终会引用它,从而生成视网膜图像。例如:

// The designated initializer. Override to perform setup that is required before the view is loaded.
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil {
    if (self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]) {
        // Doing this to precache proper retina versions, because older xcode nibs aren't loading them correctly on retina iPads with XCode 4.2 builds

        [UIImage imageNamed:@"my_button.png"];
        [UIImage imageNamed:@"my_other_button.png"];
    }
    return self;
}

我假设使用 XCode 4.3 (SDK 5.1) 构建可以与 XIB 一起正常工作,但我不准备升级到 Lion 只是为了使用该版本的 XCode。

【讨论】:

  • 谢谢!我遇到了以下情况:如果您没有像“MyImage@2x.png”这样指定图像名称,并且Xcode搜索@2x文件本身,它会找到该文件,但它不会正确显示它。它不会像预期的那样大小。但是,如果您确实像“MyImage@2x.png”这样加载图像,它会正确显示。我应该提交一份错误报告,但经过所有这些实验后,我现在已经筋疲力尽了。
【解决方案3】:

我认为这只会在设备上运行。据我了解,如果设备支持,[UIImage imageNamed:] 会查找@2x。所以它似乎内置在iOS中。这纯属猜测。

【讨论】:

    猜你喜欢
    • 2016-10-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-28
    • 2014-03-28
    • 1970-01-01
    • 2012-04-12
    相关资源
    最近更新 更多