如何开发包含图片资源的iOS框架?

How to develop an iOS framework which includes image resources?

我正在开发一个包含图片资源的iOS框架,我在框架中调用了下面的方法,

crossImage = [UIImage imageNamed:@"cross"];
arrowImage = [UIImage imageNamed:@"arrow"];

然后我构建了一个演示来测试我的框架,但是发现 crossImage 和 arrowImage 都是 nil;后来想出了imageNamed:方法 将在应用程序目录而不是框架目录中搜索图像,因此我可以通过将这两个图像添加到演示项目来修复它。然而,它几乎不优雅。那么还有其他解决方案可以在我的框架中定位图像吗?

您可以使用以下方法从框架加载图像:

+ (UIImage *)imageNamed:(NSString *)name
               inBundle:(NSBundle *)bundle
compatibleWithTraitCollection:(UITraitCollection *)traitCollection

方法。

在你的框架中class这样写:

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

您还可以使用以下方式加载图像:

[[UIImage alloc] initWithContentsOfFile:path];

您希望从包路径生成的路径。类似于:

NSBundle *bundle = [NSBundle bundleForClass:[YourFramework class]];
NSString* path = [bundle pathForResource:@"cross.jpg" ofType:nil];

只有当您的图像不在 .xcasserts 中时,这才有效。

UIImage *image = [UIImage imageNamed:@"YourFramework.framework/imageName"]

最后,我创建了一个bundle来存放所有的图片资源,我们提供了*.framework和*.bunlde,这样比较优雅。

我设法使用

在Swift框架中加载我的图像
UIImage(named: name, in: Bundle.module, compatibleWith: nil)