资源包中的资产目录

我有一个与我的框架一起提供的独立资源包。 我想在该捆绑中放置和使用资产目录。 但是UIImage imageNamed:说它使用当前的应用程序主包。 如何从不同的资产目录中加载图片?

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

从iOS 8开始,现在可以使用[UIImage imageNamed:inBundle:compatibleWithTraitCollection:]从不同的包中按名称加载图像。 例如,dynamic框架可以使用与主应用程序包分离的自己的资产目录。

根据苹果开发者:

不幸的是,除了Xcode编译成你的主包以外,不可能从任何汽车文件中载入图像,因为+ imageNamed:不接受bundle参数,这是必要的能够在一个包中打开一个资产目录)。

链接在这里:

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

有一个技巧可以使资产目录和捆绑包一起工作:将资源包的部署目标设置为6.1(或更低)。 资产目录仅在7.0版本以前,因此Xcode不会真正构build.car文件(已编译的资产目录),而是直接将资源复制到包中,如下所述:

Xcode 6为资产目录提供了不同的function,具体取决于您的项目的部署目标:

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

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

编辑:如果你应用上面描述的技巧,你最有可能不会获得与iOS 9引入的应用程序切片的优势,作为build立应用程序后,没有编译的资产目录,但只剩下一堆普通的图像,所以苹果不会能够自动剥离资源。 这只是一个假设。