Vla*_*mir 28 xcode png tiff objective-c ios
我可能在这里遗漏了一些明显的东西,但我一直无法解决以下问题:
我有一个包含普通和视网膜屏幕图像资源的项目,例如someimage.png和someimage@2x.png,它们存储在一个单独的包中.当我构建项目时,Xcode自动将它们打包成一个多页tiff(imageName.tiff
),我在finder中检查了它 - 它实际上是两个图像的多重tiff.但是,出现了一个问题:我很难加载适当的资源.
我所做的是:
NSString * imageName = ... ;
NSLog(@"imageName: %@", imageName);
UIImage * someImage = [UIImage imageNamed: imageName];
Run Code Online (Sandbox Code Playgroud)
另外我给了辅助方法,它返回带有资源的bundle:
+(NSBundle *) resourcesBundle
{
NSBundle *bundle = [NSBundle bundleWithURL:[[NSBundle mainBundle] URLForResource:@"MyResourcesBundle" withExtension:@"bundle"]];
return bundle;
}
Run Code Online (Sandbox Code Playgroud)
我试过以下imageName
:
imageName = [[AuxClass resourcesBundle] pathForResource:@"someimage" ofType:@"png"];
Run Code Online (Sandbox Code Playgroud)
在这种情况下,我都null
对imageName
.
imageName = [[AuxClass resourcesBundle] pathForResource:@"someimage" ofType:@"tiff"];
Run Code Online (Sandbox Code Playgroud)
在这种情况下,会返回精确图像路径,但是只有在我使用imageWithContentsOfFile
而不是它时它才有效imageNamed
,并且它没有采用适当的资源:尽管有屏幕类型,它仍会为视网膜加载资源.
如果我省略filetype(就像我在添加@2x
资源之前所做的那样,并且它工作正常,并且我尝试了第一件事并且确定它会起作用)
imageName = [NSString stringWithFormat: @"%@/%@",
@"MyResourcesBundle.bundle"",
@"someimage" ];
Run Code Online (Sandbox Code Playgroud)
什么都没有加载.
添加".tiff"扩展名具有相同的效果pathForResource:
- 加载视网膜资源,忽略非视网膜屏幕的资源.
那我错过了什么?加载图像的正确方法是什么?
Res*_*h32 46
您是否尝试使用以下方法加载图像:
UIImage * someImage = [UIImage imageNamed: @"someimage"];
Run Code Online (Sandbox Code Playgroud)
(假设你的项目中有一个名为'someimage'的图像,例如someimage.png)
该代码将根据平台自动选择视网膜/非视网膜版本.
如果问题是创建了TIFF,请检查:
在最新版本的XCode中,转到"编辑器"菜单,然后选择"验证设置",这将删除该图稿组合.
Wil*_*ker 11
多页TIFF仅适用于OSX; 它们不适用于iOS.
因此,您需要停止尝试访问本质上无法访问的资源,并以正确的方式执行操作!
您需要打开生成外部资源包的项目,选择目标,转到Build Settings,然后转到Deployment子标题,并将"Combine High Resolution Artwork"设置为No.然后重新编译外部资源包.
在您的主项目中,您现在应该能够以正常方式读取PNG.