解决方法
您应该使用资产目录,因为这是Apple希望您继续使用的(工具将反映出来),它们带来许多优势:
>应用程序变薄
>设置无代码的资产属性,例如渲染模式或切片
>您不必记住命名约定,如@ 2x,~ipad,-568等,以自动获取特定于设备的资产
>如果勾选您支持的版本和设备的右侧框,资产目录将指出缺少的资产,并提供了一个很好的概述
>您应该习惯它们,因为某些平台(例如,watchOS)要求您使用资产目录
有几点需要注意:
>如果部署回iOS 6,某些功能don’t work as expected – 资产目录仍然有助于组织您的资产,但运行时功能将无法工作,因为Xcode只会将普通图像文件转储到您的捆绑包中.
>如果部署到iOS 7或更高版本,Xcode会将所有资产编译成一个.car文件(这就是整个想法).但是,这可能更难调试,因为您无法查看已编译的文件,这也意味着您不能简单地从单个资产中获取文件URL.要创建文件URL,您始终必须加载资产(按名称)并首先将其写入磁盘. *
>最后一点还暗示您不能使用NSBundle(在Swift 3.0:Bundle中)API来检索图像文件的URL或路径.为了从主捆绑包以外的捆绑包加载资产,您依靠Apple提供API,which they do since iOS 8.0.如果您在资源包中组织共享代码并部署到iOS 7或更早版本,则不应使用资产目录.如果您打算开发框架,这可能是最重要的.
*例如,CoreSpotlight API允许您设置thumbnailURL
,但如果您的图像位于资产目录中,则必须自己单独将其写入磁盘,或使用thumbnailData
属性.如果您有一个文件URL,那么您永远不必将资产加载到内存中.我不确定Spotlight是否可以从您的应用包中访问文件网址.这只是一个例子.