我有一个使用大量图片的框架项目。我只是将这些图像拖到项目中,以便它们与我的源文件并列:
当我将此项目嵌入到单独的 app 项目中时,我可以按预期访问这些资源。
理想情况下,我现在想用 .xcassets 文件组织我的框架图像。与 app 项目不同,框架项目模板默认情况下不提供其中一项,因此我使用文件>手动添加了一个。新的菜单。不幸的是,当我重建框架并重新嵌入它时,我无法再访问图像。我正在尝试做什么?
答案 0 :(得分:3)
如果您要访问子项目(框架等)中的资产,则需要确保从它们自己的捆绑软件中收集资产,因为它们不是Main Bundle
的一部分。
您只需使用以下 Swift 4 代码即可做到这一点:
let bundle = Bundle(for: type(of: self))
let image = UIImage(named: "imageName", in: bundle, compatibleWith: nil)
答案 1 :(得分:2)
据我所知,我的问题的答案是是的,有点......
要使用NSImage(named: ...)
API,必须确保以下两点之一:图像应该存在于应用程序的主要包中,或者(用docs解释):
[应该] [NSImage] 对象,其名称是使用setName:方法显式设置的,并且当前位于图像缓存中。
在图像驻留在嵌入式框架中的情况下,第一个不是真的,因为框架是一个单独的包,并且没有办法在运行时添加到主包。这留下了第二种方法。
每当您的代码要使用NSImage(named: ...)
时,请确保您已使用其他方式加载图像,然后设置其名称:
let bundle = NSBundle(forClass: MyFrameworkClass.self)
let image = bundle.imageForResource(name) // image in the framework .xcassets
image.setName(name)
我不知道这有多大用处,你一定要注意文档中关于图像缓存如何操作的注释,但至少有一种方法可以将图像存储在一个.xcassets文件夹中捆绑,然后从另一个访问它们。