我正在开发一个包含图像资源的iOS框架,我在框架中调用下面的方法,
crossImage = [UIImage imageNamed:@"cross"];
arrowImage = [UIImage imageNamed:@"arrow"];
然后我构建了一个演示来测试我的框架,但是发现crossImage和arrowImage都是零;之后,我找出了imageNamed:
方法
将搜索应用程序目录中不在框架中的图像,因此我可以通过将两个图像添加到演示项目来修复它。然而,它几乎没有优雅。那么在我的框架中定位图像的任何其他解决方案呢?
答案 0 :(得分:22)
您可以使用以下方法从框架加载图像:
+ (UIImage *)imageNamed:(NSString *)name
inBundle:(NSBundle *)bundle
compatibleWithTraitCollection:(UITraitCollection *)traitCollection
方法
在你的框架类中写如:
NSBundle *frameWorkBundle = [NSBundle bundleForClass:[self class]];
UIImage *arrow = [UIImage imageNamed:@"arrow" inBundle:frameWorkBundle compatibleWithTraitCollection:nil];
UIImage *cross = [UIImage imageNamed:@"cross" inBundle:frameWorkBundle compatibleWithTraitCollection:nil];
有关此方法的详情,请参阅UIImage Class Reference。
答案 1 :(得分:1)
您还可以使用以下方式加载图片:
[[UIImage alloc] initWithContentsOfFile:path];
您要从捆绑路径生成的路径。类似的东西:
NSBundle *bundle = [NSBundle bundleForClass:[YourFramework class]];
NSString* path = [bundle pathForResource:@"cross.jpg" ofType:nil];
答案 2 :(得分:1)
仅当您的图片不在.xcasserts
时才会有效。
UIImage *image = [UIImage imageNamed:@"YourFramework.framework/imageName"]
答案 3 :(得分:0)
最后,我创建了一个包来保存所有图像资源,我们提供* .framework和* .bunlde,这更优雅。
答案 4 :(得分:0)
我设法使用 Swift 框架加载我的图像
BlazingPizza.Client