【发布时间】:2012-09-03 08:37:55
【问题描述】:
我可能在这里遗漏了一些明显的东西,但我一直无法解决以下问题:
我有一个项目,其中包含普通屏幕和视网膜屏幕的图像资源,例如 someimage.png 和 someimage@2x.png,它们存储在单独的包中。当我构建项目时,Xcode 会自动将它们打包到一个多页 tiff (imageName.tiff) 中,我已经在 finder 中检查了它——它实际上是包含两个图像的多页 tiff。然而,这里出现了一个问题:我很难加载适当的资源。
我做的是:
NSString * imageName = ... ;
NSLog(@"imageName: %@", imageName);
UIImage * someImage = [UIImage imageNamed: imageName];
我也喜欢辅助方法,它返回资源包:
+(NSBundle *) resourcesBundle
{
NSBundle *bundle = [NSBundle bundleWithURL:[[NSBundle mainBundle] URLForResource:@"MyResourcesBundle" withExtension:@"bundle"]];
return bundle;
}
我已经尝试关注imageName:
imageName = [[AuxClass resourcesBundle] pathForResource:@"someimage" ofType:@"png"];
在这种情况下,我有null 用于imageName。
imageName = [[AuxClass resourcesBundle] pathForResource:@"someimage" ofType:@"tiff"];
在这种情况下会返回实际的图像路径,但它仅在我使用 imageWithContentsOfFile 而不是 imageNamed 时才有效,并且它不占用适当的资源:尽管屏幕类型不同,但它会为视网膜加载资源。
如果我省略了文件类型(就像我在添加 @2x 资源之前所做的那样,它工作正常,并且是我尝试的第一件事并且确信它会工作)
imageName = [NSString stringWithFormat: @"%@/%@",
@"MyResourcesBundle.bundle"",
@"someimage" ];
什么都没有加载。
添加“.tiff”扩展名与pathForResource:的效果相同 - 加载视网膜资源,不考虑非视网膜屏幕资源。
那么我错过了什么?加载图片的正确方法是什么?
【问题讨论】:
-
能否请您更新问题,这样人们就不会与“Xcode 自动将它们打包到单个多页 tiff (imageName.tiff) 中的“按预期”混淆,正如预期的那样(我已经检查过它在查找器中 - 它实际上是带有两个图像的多页 tiff)"。
标签: objective-c ios xcode png tiff