关于IOS中使用一倍图与二倍图的路径用法

最近再写一个IOS换肤的应用,里面用到了动态加载图片的地方,这种场景一般分为两种,一种为APP内置资源(APP包内), 另一种为下载资源(Documents下),这时我们会遇到一个问题, 就是传入的参数都是xxxx.png 全都不带@2x的后缀, 然尔如果我按之前的常用的方法, 即:UIImage imageNamed:这个方法时, 我们不需要关心当前的屏幕分辨率是否为高分屏, 这个函数会帮我们实现不同的屏幕对应查找不同的图片,如果我们自己实现这个问题是否需要考虑, 答案只要用对方法是不需要处理的。


下面这个方法会帮我们处理我们想要的解决的问题:

image = [UIImage imageWithContentsOfFile:strPath];

大概实现方式如下:

 NSMutableArray *reps = [NSMutableArray arrayWithCapacity:2];
    CGImageSourceRef src1X = CreateCGImageSourceWithFile(imagePath);
    CGImageSourceRef src2X = CreateCGImageSourceWithFile([[[imagePath stringByDeletingPathExtension] stringByAppendingString:@"@2x"] stringByAppendingPathExtension:[imagePath pathExtension]]);

    if (src1X) {
        UIImageRep *rep = [[UIImageRep alloc] initWithCGImageSource:src1X imageIndex:0 scale:1];
        if (rep) [reps addObject:rep];
        [rep release];
        CFRelease(src1X);
    }
    if (src2X) {
        UIImageRep *rep = [[UIImageRep alloc] initWithCGImageSource:src2X imageIndex:0 scale:2];
        if (rep) [reps addObject:rep];
        [rep release];
        CFRelease(src2X);
    }
    
    return ([reps count] > 0)? reps : nil;


然而如果我们实现的方式转一下的话, 比如我们用NSData来实现图片加载,也是可以的。

            NSData *imageData = [NSData dataWithContentsOfFile:imageFullPath];
            image = [UIImage imageWithData:imageData];

但此时, NSData不会对我们的图片路径做任何特殊的处理, 如果你传入的路径是不带@2x的话, 那么就只能返回单倍的图。

因此用这种方式你需要自己来实现一下@2x是否需要的判断。


关于图片加载路径这样就可以完全解决了, 与imageNamed相比,只差一个缓存的问题, 重复图片多次访问可以感觉到差异的存在,这个也很好解决, 我自己用NSCache也实现了一下他的缓存, NSCache还会在内存不足时自动帮我们做释放的操作,每次取图片时先取一下缓存, 没有再读文件, 大功告成, 很简单。

//获取图片从缓存
-(UIImage*)getCacheImageByPath:(NSString*)path
{
    if(_cache == nil){
        _cache = [[NSCache alloc] init];
        return nil;
    }
    UIImage *image = (UIImage*)[_cache objectForKey:path];
    return image;
}


这不是教学, 只是我个人笔记, 哪里觉得处理的不好, 欢迎你给更好的解决方式。

QQ407300101

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

xuanwenchao

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值