我需要在静态库中包含图像。我创建了一个包并插入到我的图像中,问题是如果我将图像直接包含在包中,它似乎可以工作,但如果我放入 xcassets 文件,它就会停止工作。
我遵循了许多指南并在此站点上搜索了解决方案。最流行的解决方案是插入这行代码:
[UIImage imageNamed:@"MyBundle.bundle/imageName"]
但这似乎对我不起作用
有任何想法吗?
我需要在静态库中包含图像。我创建了一个包并插入到我的图像中,问题是如果我将图像直接包含在包中,它似乎可以工作,但如果我放入 xcassets 文件,它就会停止工作。
我遵循了许多指南并在此站点上搜索了解决方案。最流行的解决方案是插入这行代码:
[UIImage imageNamed:@"MyBundle.bundle/imageName"]
但这似乎对我不起作用
有任何想法吗?
有两种方法可以解决这个问题,
如果您的应用仍然支持 iOs 7,您可以使用此类别: https ://gist.github.com/serluca/e4f6a47ffbc19fccc63e
否则,从 iOs 8 开始,Apple 添加了一种方法来执行此操作:
在此处+ imageNamed:inBundle:compatibleWithTraitCollection:
定义
运行同样的问题。看起来像 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 以根据苹果文档传递主屏幕特征(但我不太明白它的含义,如果有人知道,请发表评论!)。
对于 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
}
我们的图像放置在 Images.xcassets 中,我们在 IBDesignable 中加载图像时遇到了问题。以下代码在 Interface builder 和应用程序中也完成了预览工作:
NSBundle* bundle = [NSBundle bundleForClass:[self class]];
UIImage* image = [UIImage imageNamed:@"image.jpg" inBundle:bundle compatibleWithTraitCollection:nil];