适用于iOS的图像资源

Vla*_*mir 28 xcode png tiff objective-c ios

我可能在这里遗漏了一些明显的东西,但我一直无法解决以下问题:

我有一个包含普通和视网膜屏幕图像资源的项目,例如someimage.pngsomeimage@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)

在这种情况下,我都nullimageName.

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结合高分辨率艺术品

在最新版本的XCode中,转到"编辑器"菜单,然后选择"验证设置",这将删除该图稿组合.


Wil*_*ker 11

多页TIFF仅适用于OSX; 它们不适用于iOS.

因此,您需要停止尝试访问本质上无法访问的资源,并以正确的方式执行操作!

您需要打开生成外部资源包项目,选择目标,转到Build Settings,然后转到Deployment子标题,并将"Combine High Resolution Artwork"设置为No.然后重新编译外部资源包.

在您的主项目中,您现在应该能够以正常方式读取PNG.

  • 好的,我弄明白了这个问题.如果您没有看到该设置,请在捆绑设置中将基本SDK更改为Mac OS X,然后将设置更改为no,并将基本SDK更改回iOS.即使该选项不可用,它似乎仍然在构建期间应用. (4认同)
  • 我搜索"combine"的构建设置,找到"COMBINE_HIDPI_IMAGES",设置为"YES".我把它设置为"NO",它停止组合图像. (2认同)

小智 8

如果您正在使用捆绑包而不是去

- > build settings - > COMBINE_HIDPI_IMAGES为NO,

而你只需要清洁和建造!