11

我需要在静态库中包含图像。我创建了一个包并插入到我的图像中,问题是如果我将图像直接包含在包中,它似乎可以工作,但如果我放入 xcassets 文件,它就会停止工作。

我遵循了许多指南并在此站点上搜索了解决方案。最流行的解决方案是插入这行代码:

[UIImage imageNamed:@"MyBundle.bundle/imageName"] 

但这似乎对我不起作用

有任何想法吗?

4

4 回答 4

10

有两种方法可以解决这个问题,

如果您的应用仍然支持 iOs 7,您可以使用此类别: https ://gist.github.com/serluca/e4f6a47ffbc19fccc63e

否则,从 iOs 8 开始,Apple 添加了一种方法来执行此操作: 在此处+ imageNamed:inBundle:compatibleWithTraitCollection:定义

于 2015-05-01T13:13:23.523 回答
8

运行同样的问题。看起来像 1 参数 imageNamed 方法中的 XCAssets 的内联包支持被破坏了。虽然使用 imageNamed:inBundle:compatibleWithTraitCollection 有一个解决方法:小心,这只是 iOS8 !

NSBundle *bundle = [NSBundle bundleWithPath:[[NSBundle mainBundle] pathForResource:@"static_lib_bundle_name" ofType:@"bundle"]];
UIImage *image  = [UIImage imageNamed:@"image_in_the_xcassets_you_want" inBundle:bundle compatibleWithTraitCollection:nil];

注意: traitCollection 设置为 nil 以根据苹果文档传递主屏幕特征(但我不太明白它的含义,如果有人知道,请发表评论!)。

于 2014-10-22T13:47:37.040 回答
3

对于 Swift 2.1:

let bundle = pathToBundle // define for your app or framework
if let image = UIImage(named: "drop_arrow", inBundle: bundle, compatibleWithTraitCollection: nil) {
    // process image
}
于 2015-10-28T03:00:27.453 回答
2

我们的图像放置在 Images.xcassets 中,我们在 IBDesignable 中加载图像时遇到了问题。以下代码在 Interface builder 和应用程序中也完成了预览工作:

NSBundle* bundle = [NSBundle bundleForClass:[self class]];
UIImage* image = [UIImage imageNamed:@"image.jpg" inBundle:bundle compatibleWithTraitCollection:nil];
于 2015-05-01T11:30:28.017 回答