我可能在这里遗漏了一些明显的东西,但我一直无法解决以下问题:
我有一个项目,其中包含普通屏幕和视网膜屏幕的图像资源,例如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:
- 加载视网膜资源,不考虑非视网膜屏幕的资源。
那么我错过了什么?加载图像的正确方法是什么?