美文网首页ios进阶iOS Foundations图像
imageWithContentsOfFile遇到的坑

imageWithContentsOfFile遇到的坑

作者: 慕言的世界 | 来源:发表于2016-11-04 13:06 被阅读1974次

    在工程里拖入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遇到的坑

      本文链接:https://www.haomeiwen.com/subject/feziuttx.html