所以未来的一些iPad可能会有视网膜显示屏。而苹果最有可能选择的是stick to the @2x paradigm。我期待这一点已经有一段时间了,所以我的应用程序中已经有了@2x iPad的图片;其中一些已经在应用程序商店中了。
我的问题是:当这个神秘的iPad发布时,为了利用这些文件,我需要重新编译和/或重新提交应用程序才能使用这些艺术作品吗?或者这是操作系统本身的一些东西,它应该自动地使用它们?
(既然之前也发生过同样的事情,那么在iPhone-4之前的SDK下发布的应用程序碰巧有正确的艺术作品会发生什么?它们只是起作用了吗?)
发布于 2012-03-17 07:56:08
我今天用视网膜iPad做了一个实验,结果似乎是这样的:
(我们有许多基于XCode-3的项目,其中许多是针对retina iPhone的混合项目。他们中没有一个人在新ipad上使用@2倍的图形。当我在Xcode3和Xcode4中编译一个测试项目时,4版本使用了retina资源,而3版本没有。进一步的实验表明,差异被编译到可执行文件本身中,因此它不像我希望的那样只是一个info.plist调整。)
我的假设是,使用较早版本的SDK编译会在运行时将您链接到不同版本的UIKit。当我更新我们的代码时,奇怪的行为差异似乎证实了这一点。如果有人知道咒语的确切答案,请评论。
编辑后再加一次:还有一些笔尖的区别。在Xcode4中打开的旧项目不会使用@2x图形,直到我重新保存我的MainWindow.nib;然后它一直使用,没有其他更改。我怀疑UIWindow对象的隐藏属性。
发布于 2012-05-29 22:35:49
当我在雪豹上运行XCode 4.2 (iOS SDK5.0)进行构建时,我发现了以下内容:
在您的代码中使用UIImage imagedNamed:以编程方式加载图像将在视网膜iPad上正确加载retina @2x图像。
Interface Builder XIB文件中按钮和视图上指定的图像通常无法正确加载@2x视网膜图像。
我发现的解决方法是,通过在视图控制器的(或适当的) initWithNibName:(NSString *)包:(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;
}我假设使用Lion 4.3 (SDK5.1)构建可以在XIB上正常工作,但我不准备仅仅为了使用那个版本的XCode而升级到XCode。
发布于 2012-02-21 11:40:49
我想这只会在设备上起作用。据我所知,UIImage imageNamed:如果设备支持@2x,就会查找它。因此,它似乎内置在iOS中。这纯粹是一种猜测。
https://stackoverflow.com/questions/9371780
复制相似问题