zoukankan      html  css  js  c++  java
  • 开源框架:SDWebImage

    http://blog.csdn.net/uxyheaven/article/details/7909373

    SDWebImage是我搞iOS以来少数佩服的框架,膜拜一下作者.真的写的非常棒!

    这套开源框架还是蛮重要的, 涉及到异步加载图片源和自动缓存.

    我们如果能够熟练使用其API 就可以实现很多复杂的需求了.

    作者依旧在更新,目前3.0 版本已经非常强大! 简化了更多API接口.加强了下载类,支持多个文件同时下载,内置了下载进度功能.等

    github托管地址如下:

    https://github.com/rs/SDWebImage

    SDWebImage API 文档入口(英文的,蛋疼,如果中文的话,估计咱也不写这篇文章了,要么也很短.):

    http://hackemist.com/SDWebImage/doc/

    如果你只是匆匆忙忙下载了一个framework 就回到了自己工程,可能会遇到无法使用的情况:那么下面的文章来解决你遇到的问题:

    http://blog.csdn.net/qjlhlh/article/details/8191111

    里面提到一句,使用这类代码的时候,最好预先看看Readme(使用说明)

    1:引入系统框架 ImageIO.framework.

    2:framework 引入头文件的方式如下:

    [csharp] view plaincopy
     
     
    1. #import<SDWebImage/UIImageView+WebCache.h>  

    3:Build Settings->Other Linker Flags->-ObjC or-all_load

    以上三部设置之后,就可以开始写代码了.

    接下来介绍使用到的各个类库功能说明:

    SDWebImageDownloader

    这个下载器改版很大,现在里面就一个方法,就是发起前往下载图片的函数:

    [csharp] view plaincopy
     
     
    1. [[SDWebImageDownloader sharedDownloader] downloadImageWithURL:imageUrl options:SDWebImageDownloaderProgressiveDownload progress:^(NSUInteger receivedSize, long long expectedSize) {  
    2.     NSLog(@"%u %lld",receivedSize,expectedSize);  
    3. } completed:^(UIImage *aImage, NSData *data, NSError *error, BOOL finished) {  
    4.     //self.image = aImage;  
    5.     NSLog(@"成功了:%d",UIImageJPEGRepresentation(aImage, 1).length);  
    6. }];  

    里面大部分参数属于一看就懂的,进度Block返回的信息有两个参数:1:下载进度. 2:文件大小.

    我这里解释一下里面的options枚举的作用

    SDWebImageDownloaderOptions

    1:SDWebImageDownloaderLowPriority 这个属于默认的使用模式了,前往下载,返回进度Block信息,完成时调用completedBlock

    2:SDWebImageDownloaderProgressiveDownload 这个是新版本加的功能,设置后,在返回进度Block的同时,返回completedBlock,里面的UIImage就是当前下载时的图片,可以实现将图片一点点显示出来的功能.

    人世间最难的莫过于理解了! 开句玩笑^^

    那么SDWebImageDownloader 在新版本的中的分工很明确,只做一件事情,那就是下载,只是下载而已,所以,下载成功以后的图片资源是不会自动缓存的.

    如果要缓存,这里需要使用到

    SDImageCache

    SDImageCacheType 当下载请求结束时,通过这个枚举来告知图片的来源

    1:SDImageCacheTypeNone   网络

    2:SDImageCacheTypeDisk     设备硬盘

    3:SDImageCacheTypeMemory 内存

    将上面两步骤的需求合并可直接使用

    SDWebImageManager

    新版本的管理类的改动也相当大,而且就一个方法了,如下:

    [csharp] view plaincopy
     
     
    1. [[SDWebImageManager sharedManager] downloadWithURL:imageUrl options:SDWebImageLowPriority progress:^(NSUInteger receivedSize, long long expectedSize) {  
    2.     NSLog(@"%u %lld",receivedSize,expectedSize);  
    3. } completed:^(UIImage *aImage, NSError *error, SDImageCacheType cacheType, BOOL finished) {  
    4.     self.image = aImage;  
    5.     NSLog(@"成功了:%d",UIImageJPEGRepresentation(aImage, 1).length);  
    6. }];  


    这样发起的下载请求,就会自动缓存图片资源了.

    那么任何发起的下载请求,都会返回一个代理. 这个写法很神奇,值得深究啊.

    也就是:SDWebImageOperation 将这个委托缓存一下,做什么用呢?一件事情,取消下载请求.

    这边文章介绍了整个SDWebImage的运作原理,你看完之后,一定会说:真TMD 的复杂

    http://blog.csdn.net/uxyheaven/article/details/7909373

  • 相关阅读:
    线程学习笔记
    mac系统在配置navicat时连接数据的时候提示can't connect to mysql server on '127.0.0.1'
    启动apache 提示Starting httpd: AH00558
    使用block的时候,导致的内存泄漏
    如何调整cell的大小
    代码控制打电话、发短信、发邮件、打开手机app等操作
    汇编学习--第九天
    汇编学习--第八天
    原码一位乘法与补码一位乘法
    定点整数的加减法
  • 原文地址:https://www.cnblogs.com/kenshinobiy/p/4379047.html
Copyright © 2011-2022 走看看