David Ansermot是正确的,xcassets是一种更好的方法,并且强烈推荐使用。如果您不能使用它(例如在旧版本的iOS上运行),仍需将所有内容放在一个目录中,并使用
imageNamed:
。与手动加载文件相比,这具有重要的缓存优势。
资产目录(xcassets)是管理图像资源的一种(相对较新的)统一方式。这些图像不再作为单独的文件在磁盘上访问。相反,
imageNamed:
会查询资产目录并获取正确的图像。
在资源目录(asset catalogs)出现之前(对于非图像仍然如此),资源都存储在本地化的目录中。所有未本地化的资源将被放置在名为“Resources”的目录中(无论这些文件在源代码树中的位置如何,以及这些文件在Xcode文件夹中如何排列)。本地化的文件将存储在像“English.lproj”或“French.lproj”这样的目录中。当您调用
NSBundle
来加载
MyImage
时,它会按照用户配置的顺序查看每个本地化目录,如果在这些目录中找不到,则会查找
Resources
目录。
现在,通过在Xcode中将它们标记为目录引用,可以将完整的目录存储为“资源”。在这种情况下,整个目录将被复制到
Resources
或适当的本地化目录中。要在这样的目录中查找文件,可以使用
NSBundle
方法的
...inDirectory:
版本。因此,大多数时候,您只需要使用
imageNamed:
即可。如果可用,它将从资源目录中获取内容,然后搜索本地化目录,最后再查找
Resources
。如果您需要查找非图像文件,或者出于某种原因想要获取文件的真实路径,则可以按以下方式计算它:
NSString *path = [[NSBundle mainBundle] pathForResource:@"MSB_big_icon" ofType:@"png"];
如果该资源在目录树中(因为它是Xcode中的目录引用),你可以像这样访问它:
NSString *path = [[NSBundle mainBundle] pathForResource:@"MSB_big_icon"
ofType:@"png"
inDirectory:@"Raymio_android_images/MSB_big_icon.imageset"];