因此未来的某些iPad可能会有Retina Display。 Apple最有可能进入stick to the @2x paradigm。我一直期待这一段时间,因此我已经在我的应用程序中为iPad安装了@ 2x艺术品;有些已经在应用程序商店中。
我的问题是:我需要重新编译和/或重新提交应用程序,以便在发布这个神秘的iPad时使用这些艺术品来利用这些文件吗?或者,这是否已经融入操作系统本身,它应该只是自动使用它们?
(由于之前发生了同样的事情,在iPhone-4之前的SDK中发布了碰巧有正确艺术作品的应用程序发生了什么?它们刚刚起作用吗?)
答案 0 :(得分:6)
我今天尝试使用视网膜iPad,这就是以下情况:
(我们有很多基于XCode-3的项目,其中很多是视网膜iPhone的混合项目。他们都没有在新的ipad上使用@ 2x图形。当我在Xcode 3和Xcode中编译测试项目时4,4版本使用了视网膜资源而3版本没有。进一步的实验表明,差异被编译成可执行文件本身,所以它不仅仅是我希望的info.plist调整。)
[η:我的假设是,使用早期的SDK进行编译会在运行时将您链接到不同版本的UIKit。我更新代码时行为的奇怪差异似乎证实了这一点。如果有人知道肯定知道咒语,请发表评论。]
[编辑添加,再次:还有一些笔尖的差异。在我重新保存我的MainWindow.nib之前,在xcode 4中打开的旧项目不会使用@ 2x图形;然后它完成了,没有其他变化。我怀疑UIWindow对象的隐藏属性。]
答案 1 :(得分:2)
我在使用Snow Leopard上运行的XCode 4.2(iOS SDK 5.0)构建时发现的内容如下:
在您的代码中使用[UIImage imagedNamed:]以编程方式加载的图像将在视网膜iPad上正确加载视网膜@ 2x图像。
Interface Builder XIB文件中按钮和视图上指定的图像通常无法正确加载@ 2x视网膜图像。
我发现的解决方法是强制UIImage通过在视图控制器(或适当的)initWithNibName:(NSString *)包中使用[UIImage imagedNamed:]调用来缓存XIB中引用的每个图像:( NSBundle *)。编程方法执行良好的@ 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。
答案 2 :(得分:1)
我认为这只适用于设备。据我所知,如果设备支持,[UIImage imageNamed:]会查找@ 2x。所以它似乎内置于iOS。这纯粹只是猜测。