资源包中的资产目录

时间:2013-09-19 17:09:37

标签: ios resources bundle assets ios7

我的框架附带了一个单独的资源包。我想在该捆绑中放置和使用资产目录。然而UIImage imageNamed:说它使用当前的应用程序主包。如何从不同捆绑包中的资产目录加载图像?

使用[bundle pathForResource:name ofType:@“png”]的技巧不适用于已编译的资产目录。我已经验证了Assets.car文件确实在包中,它包含我的图像。

3 个答案:

答案 0 :(得分:15)

从iOS 8开始,您现在可以使用[UIImage imageNamed:inBundle:compatibleWithTraitCollection:]按名称从其他捆绑中加载图片。例如,动态框架可以使用与主应用程序包捆绑的自己的资产目录。

答案 1 :(得分:3)

根据Apple开发者:

  

不幸的是,除了Xcode编译到主包中的图像之外,不可能从任何汽车文件加载图像,因为+ imageNamed:不接受bundle参数,这是需要这样做的(即使这样)它只能在一个包中打开一个资产目录。)

这是链接:

https://devforums.apple.com/message/968859#968859

答案 2 :(得分:2)

有一个技巧可以使资产目录与bundle一起使用:将资源包的部署目标设置为6.1(或更低)。资产目录自7.0以来一直存在,因此Xcode实际上不会构建.car文件(已编译的资产目录),而是直接将资产复制到捆绑包中,如文档所述here

  

Xcode 6为资产目录提供不同的功能,具体取决于>项目的部署目标:

     
      
  • 对于所有项目,可以使用集名称加载单个图像。
  •   
  • 对于部署目标至少为iOS 7或OS X 10.9的项目,Xcode会将您的资产目录编译为运行时二进制文件格式,从而缩短应用程序的下载时间。
  •   

需要注意的是,忽略任何其他信息(切片,渲染模式......),您只能获得普通图像。虽然通过资产目录组织可能更方便,但我觉得这可能会导致一些难以发现的错误/混乱......

编辑:如果您应用上述技巧,您很可能无法获得iOS 9中引入的App Slicing优势,因为在构建应用程序后,没有编译资产目录但只剩下一堆普通图像,因此Apple将无法自动剥离资源。这只是一个假设。