无法从 CocoaPods 中的 .xcasset 加载图像
Posted
技术标签:
【中文标题】无法从 CocoaPods 中的 .xcasset 加载图像【英文标题】:Can't load images from .xcasset in CocoaPods 【发布时间】:2015-10-11 09:01:11 【问题描述】:我正在创建一个 pod,并且我有一个想要使用的图像资产目录。 在我的 .podspec 文件中,我将其设置为:
s.resource_bundles =
'MyPodResources' => ['*.xcassets']
Images.xcassets 位于 pod 的根目录中。
当我尝试使用 imageNamed()
加载图像时,它只是无法正常工作。我没有收到错误或警告,但没有显示图像。
这是有趣的部分 - 如果我尝试在示例应用程序的 Main.storyboard 中添加图像,我可以选择该图像并且它在 Interface Builder 中显示良好。但是,当我运行示例应用程序时,图像不可见。
我查看了 GH 上的所有问题,但仍然找不到解决方案……这是 Xcode 7/ios 9 问题吗?
谢谢!
【问题讨论】:
好像是目标会员的问题 什么是'imageLoad'?如果您使用 imageNamed 函数,它会从默认包加载图像,因此您必须直接指定 MyPodResources 包才能从那里加载图像。尝试使用这个问题的解决方案:***.com/questions/26158980/… @Iyuna 抱歉,意思是 imageNamed。将尝试从捆绑包中加载它,但在我的研究过程中,我发现 CocoaPods 不需要这些信息 - 它应该以某种方式自动包含捆绑包...... 你搞清楚了吗? @KingPolygon 感谢您提醒我 - 我实际上已经解决了,请在下面查看我的答案。 【参考方案1】:最后我为UIImage
写了一个扩展,放到pod目录下。它看起来像这样:
class func bundledImage(named: String) -> UIImage?
let image = UIImage(named: named)
if image == nil
return UIImage(named: named, inBundle: NSBundle(forClass: MyBasePodClass.classForCoder()), compatibleWithTraitCollection: nil)
// Replace MyBasePodClass with yours
return image
我像这样使用它:
imageView.image = UIImage.bundledImage("icon-grid")
就是这样,希望有人觉得这很有用!
【讨论】:
【参考方案2】:我遇到了同样的问题,发现了一条关于 .podspec 文件的小而重要的信息
我试图使用故事板中 .xcassets 内的 pod 包中的图像,它会在故事板中显示正常,但是当我运行应用程序时它会崩溃,说它找不到资源。
我将我的 podspec 更改为包含 s.resources
以及 s.resource_bundles
s.resource_bundles =
'SDKRes' => ['SDK/Assets/*']
s.resources = ['SDK/Assets/*.xcassets']
然后它能够从情节提要中正确加载资源
【讨论】:
谢谢你 Fonix ,经过一番挣扎,你救了我。【参考方案3】:在 Swift 3 中:
let bundle: Bundle = Bundle(identifier: "Framework Bundle ID")!
yourImageView.image = UIImage(named: "imageNameInAssets", in: bundle, compatibleWith: nil)
【讨论】:
【参考方案4】:我碰到了这个问题,用下面的方法解决了。
Assets.xcassets 无法加载
一开始我把我的图标图片放在 Assets.xcassets 中,但是我无法读取其中的图片。
改用 .bundle
将您的图标图像打包。创建捆绑包很容易。
-
创建一个文件夹。
将您的图片复制到此文件夹中。
添加 .bundle 作为该文件夹的副标题
将此 .bundle 拖入您的项目中
在您的 .podspec 中编辑资源
s.resource_bundles = '<YourBundleName>' => ['*.bundle']
请注意,如果您在此处输入不同的名称,则会重命名您的捆绑包!
创建一个类来帮助您将图像打包
class ImageHelper
static func image(_ name: String) -> UIImage?
let podBundle = Bundle(for: ImageHelper.self) // for getting pod url
if let url = podBundle.url(forResource: "<YourBundleName>", withExtension: "bundle") //<YourBundleName> must be the same as you wrote in .podspec
let bundle = Bundle(url: url)
return UIImage(named: name, in: bundle, compatibleWith: nil)
return UIImage()
获取您的图像
ImageHelper.image("<YourImageName>")
希望这会有所帮助。
【讨论】:
以上是关于无法从 CocoaPods 中的 .xcasset 加载图像的主要内容,如果未能解决你的问题,请参考以下文章
从 Xcode Swift 中 Assets.xcassets 中的文件夹访问图像
xcassets 中的所有图像,然后如何加载从我的包中的 nib 引用的图像