我https://github.com/fulldecent/FDChessBoardView工作得非常好,我现在从头开始使用pod lib create
再次启动项目以制作Podspec。
有一个{' .h'。'}文件和一些图片。图像位于提供的Pod / Assets文件夹中的文件系统中。 podspec文件中记录了资源:
s.resource_bundles = {
'FDChessboardView' => ['Pod/Assets/*']
}
(我也尝试将这些文件直接添加到XCode中的Development Pods/FDChessboardView/Resources
组中。)
在库实现文件中,我需要参考这些图像。我试过了:
NSString *bundlePath = [[NSBundle mainBundle] pathForResource:@"FDChessboardView" ofType:@"bundle"];
NSBundle *bundle = [NSBundle bundleWithPath:bundlePath];
NSString *imagePath = [bundle pathForResource:@"aa" ofType:@"png"];
UIImage* image = [UIImage imageWithContentsOfFile:imagePath];
这里正确设置了imagePath。此文件存在且file
确认它是PNG:
[...] aa.png:PNG图像数据,182 x 164,8位/彩色RGBA,非隔行扫描
但是UIImage是NULL。
我也试过这些:
image = [UIImage imageNamed:@"aa"];
UIImage *image = [UIImage imageNamed:@"FDChessboardView.bundle/aa.png"];
image = [UIImage imageNamed:@"aa" inBundle:bundle compatibleWithTraitCollection:nil];
所有这些都会产生NULL。
任何人都可以帮我指出如何加载主题图片资源的正确方向吗?
谢谢!
威尔
答案 0 :(得分:11)
好的 - 我找到了一个适合我的解决方案:
在我创建的lib中,我有以下课程:AEBubbleField.h
AEBubbleView.m
我还在生成的文件结构的Assets
文件夹中有一个名为background.png
的图像。我想在上面的lib文件中使用它,所以我将以下内容添加到pod规范中(以确保png与我的lib类一起复制)
s.ios.resource_bundle = { 'AEBubbleField' => 'Pod/Assets/*.png' }
然后我可以通过以下方式访问图像:
NSBundle *bundle = [NSBundle bundleForClass:[self class]]; // Any class in the lib can be used here, I just went for the current class
UIImage *backgroundImage = [UIImage imageNamed:@"background.png" inBundle:bundle compatibleWithTraitCollection:nil];
这是我获取图像并使用它的唯一方法。我试过的所有其他方法只是像原始问题一样返回nil
。
答案 1 :(得分:2)
这个答案对我有用 https://stackoverflow.com/a/34324540/1897767
而且,我的快捷代码是:
class func loadImage(name: String) -> UIImage? {
let podBundle = NSBundle(forClass: MyClass.self)
if let url = podBundle.URLForResource("MyBundleName", withExtension: "bundle") {
let bundle = NSBundle(URL: url)
return UIImage(named: name, inBundle: bundle, compatibleWithTraitCollection: nil)
}
return nil
}
答案 2 :(得分:1)
如果您使用的是Swift 2>你可以这样访问:
// should access the bundle for this class
let bundle = NSBundle(forClass: self.classForCoder)
// successfully loaded image
let myImageToUse = UIImage(named: "image", inBundle: bundle, compatibleWithTraitCollection: nil)
答案 3 :(得分:0)
Rob的回答对我不起作用,我想是因为我没有从pod lib create
s.resource_bundles = {
'PodCore' => ['Pod/Assets/*.png',
'Pod/Classes/**/*.xib',
'Pod/Classes/**/*.storyboard']
}
我能够从该资源包加载图像,但必须明确定义它。
NSString *bundleURL = [[NSBundle mainBundle] pathForResource:@"PodCore"
ofType:@"bundle"];
NSBundle *podBundle = [NSBundle bundleWithPath:bundleURL];
UIImage *image = [UIImage imageNamed:@"home_black.png"
inBundle:podBundle
compatibleWithTraitCollection:nil];