我有images.xcassets列出了更复杂的捆绑资源,我尝试在文件名中单独说明:MSB_big_icon,然后尝试在images.xcassets中添加路径。
有谁能告诉我我做错了什么?
NSString *path = [[NSBundle mainBundle]pathForResource:@"/Raymio_android_images/MSB_big_icon.imageset/MSB_big_icon" ofType:@"png"];
NSLog(@"path: %@", path);
MSBIcon *tilecon = [MSBIcon iconWithUIImage:[UIImage imageWithContentsOfFile:path] error:&error];
答案 0 :(得分:2)
David Ansermot说得对,xcassets是一种更好的方法,非常受欢迎。如果您不能使用它(例如在旧版本的iOS上运行),仍然将所有内容放在一个目录中并使用imageNamed:
。与手动加载文件相比,这具有显着的缓存优势。
asset catalog(xcassets)是一种(相对)新的统一管理图像资源的方式。这些图像不再可以作为磁盘上的单独文件访问。相反,imageNamed:
会查询资产目录并获取正确的资产。
在资产目录之前(对于非图像),资产存储在本地化目录中。所有未本地化的资产都将放入名为Resources
的目录中(无论这些文件在源树中的位置如何,无论这些文件如何排列在Xcode文件夹中)。本地化文件将存储在English.lproj
或French.lproj
等目录中。当您NSBundle
调用加载MyImage
时,它会按用户配置的顺序查看每个本地化目录,如果在任何这些目录中找不到它,它会查找{{1} }。
现在可以将完整目录存储为"资源"通过在Xcode中将它们标记为目录引用。在这种情况下,整个目录将被复制到Resources
或相应的本地化目录中。要在此类目录中查找文件,您可以使用Resources
版本的...inDirectory:
方法。
因此,大多数情况下,您只想使用NSBundle
,它将从资产目录中获取内容(如果可用),然后搜索本地化目录,然后查看imageNamed:
。如果您需要查找非图像,或者由于某种原因您想要文件的真实路径,您可以像这样计算它:
Resources
如果该资源位于目录树中(因为它是Xcode中的目录引用),您可以像这样访问它:
NSString *path = [[NSBundle mainBundle] pathForResource:@"MSB_big_icon" ofType:@"png"];
答案 1 :(得分:0)
以下是我的某个应用中的代码示例:
NSString *appKey = @"Applications__GENERIC";
NSString *path = [[NSBundle mainBundle] pathForResource:appKey ofType:@"plist"];
appData = [NSDictionary dictionaryWithContentsOfFile:path];
“Applications__GENERIC.plist”存储如下:
其他解决方案: 使用images.xcassets。 然后在您的代码中加载图像,使用代码:
UIImage *image = [UIImage imageNamed:@"MyImageWithoutExtension"];
不要放任何路径或扩展名,只放置图片的名称
答案 2 :(得分:0)
尝试使用:
NSString *path = [[NSBundle mainBundle] pathForResource:@"MSB_big_icon" ofType:@"png" inDirectory:@"Raymio_android_images/MSB_big_icon.imageset"];
您还可以进行调试的是打印出来
[[NSBundle mainBundle] bundleURL]
然后导航到该文件夹,查看文件夹结构是否与您使用的路径相对应。
我今天只是苦苦于此,希望它也适合你。