imageWithContentsOfFile遇到的坑

在工程里拖入login@2x login@3x俩张图片,然后使用如下代码:

    BGimageView.image = [UIImage imageWithContentsOfFile:path];```
来获取对应的图片是没有问题的。
看到 *Apple*的开发文档说明  `imageWithContentsOfFile:`是可以自动区分*@2x* *@3x* 的图片的,所以我就试试吧。
```NSString *path = [[NSBundle mainBundle]pathForResource:@"login" ofType:@"png"];
  BGimageView.image = [UIImage imageWithContentsOfFile:path];

奇怪的事出现了、这么写并没有获取到图片,返回的path打印的结果为空。于是我就怀疑imageWithContentsOfFile能区分@2x @3x是不是真的。再次仔细查看文档我又看到了这么一句话

The full or partial path to the file.
`完整或部分链接`

是不是我获取的path有问题呢?然后我用NSString *path = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"login.png"]; BGimageView.image = [UIImage imageWithContentsOfFile:path];试了一下果然获取到了图片,真是皇天不负有心人。
理解下NSString *path = [[NSBundle mainBundle]pathForResource:@"login" ofType:@"png"];是获取到的是具体的某一个文件@2x就是@2x,@3x就是@3x,而Login就是login,所以用login来获取图片的地址因为根本就不存在login这个图片,而NSString *path = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"login.png"];获取到的是类似文件的相对路径(这么理解)具体这里面的@2x、@3x就是imageWithContentsOfFile:自动来匹配了。

2017.11.03号更新

Xcode9 出来的同时伴随一个巨坑,导致小伙伴们按我上文所说的方法依然获取不到图片。解决如下(只针对Xcode9)
选中工程文件-》Build Phase -》Copy Bundle Resources 再添加一遍图片即可
Xcode9 当你拖拽图片进入工程的时候默认没有添加到bundle中,故取不到图片。
但是9之前的可以小伙伴们可以放心使用(Xcode9 独享!!!)。

你可能感兴趣的:(imageWithContentsOfFile遇到的坑)