将.xcassets文件添加到Xcode框架项目

Pau*_*son 5 xcode cocoa

我有一个使用许多图像的框架项目。就目前而言,我只是将这些图像拖到项目中,以便它们与我的源文件并排放置:

在此处输入图片说明

当我将此项目嵌入到单独的应用程序项目中时,我可以按预期访问这些资源。

理想情况下,我现在想使用.xcassets文件来组织框架图像。与应用程序项目不同,框架项目模板默认情况下不提供其中之一,因此我使用“ 文件”>“新建”菜单手动添加了一个。不幸的是,当我重建框架并重新嵌入它时,我无法再访问图像。我想做的事可能吗?

Fot*_*Dim 8

如果您想访问子项目(框架等)中的资产,您需要确保从它们自己的包中收集它们,因为它们不是Main Bundle.

你可以用这个Swift 4代码简单地做到这一点:

let bundle = Bundle(for: type(of: self))
let image = UIImage(named: "imageName", in: bundle, compatibleWith: nil)
Run Code Online (Sandbox Code Playgroud)


Pau*_*son 3

据我所知,我的问题的答案是肯定的,有点......

要使用NSImage(named: ...)API,必须满足以下两件事之一:图像应该存在于应用程序的主包中,或者(解释一下文档

[应该有]一个[NSImage]对象,其名称是使用 setName: 方法显式设置的,并且当前驻留在图像缓存中。

在图像驻留在嵌入式框架中的情况下,第一个情况是不正确的,因为框架是一个单独的包,并且无法在运行时添加到主包中。这就只剩下第二种方法了。

每当您的代码要使用时,NSImage(named: ...)请确保您已经使用其他方式加载了图像,然后设置其名称:

let bundle = NSBundle(forClass: MyFrameworkClass.self)
let image = bundle.imageForResource(name) // image in the framework .xcassets
image.setName(name)
Run Code Online (Sandbox Code Playgroud)

我不知道这有多大用处,您绝对应该了解文档中有关图像缓存如何运行的注释,但它至少是一种将图像存储在一个捆绑包中的 .xcassets 文件夹中的方法,然后从另一个访问它们。