Web image(网络图像)

该库提供了一个支持来自Web的远程图像的UIImageView类别
它提供了:

添加网络图像和缓存管理到Cocoa Touch framework的UIImageView类别

  • 异步图像下载
  • An asynchronous memory + disk image caching with automatic cache expiration handling
  • 支持GIF动画
  • 支持WebP格式
  • 后台图像解压
  • 保证相同的url不会下载多次
  • 保证伪造的URL不会尝试一遍又一遍的下载
  • 保证主线程永远不会被阻塞
  • Performances!
  • 使用GCD和ARC

    注意:SDWebImage 3.0不向后兼容2.0并且最低需要iOS 5.0 的版本。如果你的iOS版本低于5.0,请使用2.0版本

  • 如何使用

    API 文档地址 http://hackemist.com/SDWebImage/doc/

    swift导入库并建立桥接

    1、选中项目,右键,点击Add Files to xxxx
    2、找到SDWebImage.xcodeproj,并加入项目中
    3、在Build Phases中的Link Binary With Libraries选项卡中,加入ImageIO.framework、libSDWebImage.a
    4、在Build Settings中的Linking选项卡中找到Other Linker Flags,双击右边区域,在弹出的框中点击+按钮,输入-ObjC
    5、建立项目桥文件,输入引用代码

    #import <SDWebImage/UIImageView+WebCache.h>
    Using UIImageView+WebCache category with UITableView

    仅需引入UIImageView+WebCache.h 头文件,在UITableViewDataSource的方法tableView:cellForRowAtIndexPath:中调用 setImageWithURL:placeholderImage: 方法。从异步下载到缓存管理,一切都会为你处理。

    func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
    
       let cell = tableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath) as! TableViewCell
    cell.detailLabel.text = "\(indexPath.row)"
    cell.pictureView.sd_setImageWithURL(NSURL(string: "http://www.szplanner.com/images/inside/product_activity_thumb.jpg"), placeholderImage: UIImage(named: "nopic.jpg")) return cell
    }
    Using blocks

    使用blocks,你将被告知下载进度,完成时是成功还是失败:

    cell.pictureView.sd_setImageWithURL(NSURL(string: "http://www.szplanner.com/images/inside/product_activity_thumb.jpg"), placeholderImage: UIImage(named: "nopic.jpg")) { (image, error, cacheType, url) -> Void in
    println("成功")
    }

    注意:如果请求被取消,那么block不会被调用(无论成功还是失败)。

    Using SDWebImageManager

    SDWebImageManager 是UIImageView+WebCache 类别中的类。它链接了异步下载和本地图片存储

    下面是如何使用SDWebImageManager的代码:(有缓存机制)

    var imageURL:NSURL = NSURL(string: "http://www.szplanner.com/images/inside/product_thumb.jpg")!
    
    SDWebImageManager.sharedManager().downloadImageWithURL(imageURL, options: SDWebImageOptions.allZeros, progress: { (min:Int, max:Int) -> Void in
    
                 println("加载中 ")
    
          }) { (image:UIImage!, error:NSError!, cacheType:SDImageCacheType, finished:Bool, url:NSURL!) -> Void in
    
              if (image != nil)
    {
    println("图片缓存完成")
    }
    }

    也能够独立地使用异步图像下载:(没有缓存机制)

    var imageURL:NSURL = NSURL(string: "http://www.szplanner.com/images/inside/product_thumb.jpg")!
    SDWebImageDownloader.sharedDownloader().downloadImageWithURL(NSURL(string: imageNetURL), options: SDWebImageDownloaderOptions.allZeros, progress: { (min:Int, max:Int) -> Void in }, completed: { (image:UIImage!, data:NSData!, error:NSError!, finished:Bool) -> Void in })

    为了方便,SDImageCache类提供了一个单例,但是如果你想创建单独的缓存命名空间你也可以创建新的实例。

    你可以使用imageForKey:方法来查找缓存,如果返回为nil,说明当前图像不拥有缓存。因此你负责生成并缓存它。缓存键(cache key)是一个程序中图像缓存的唯一标识符,他通常是图像的url。

    SDImageCache.sharedImageCache().queryDiskCacheForKey(imageNetURL, done: { (image:UIImage!, cacheType:SDImageCacheType) -> Void in
    
       println("缓存中查找到了")
    
    })

    默认情况下,如果一个图像不能在内存缓存中找到,SDImageCache将会查找高速缓存。你可以调用替代的方法imageFromMemoryCacheForKey:来预防这种情况的发生。
    存储一个图像到缓存,你可以使用storeImage:forKey: 方法:

    SDImageCache.SharedImageCache.StoreImage (image: myImage, key: "myKey");
    默认情况下,图像将被存储在内存上的缓存以及磁盘上的缓存(异步)。如果你想只在内存中缓存,使用替代方法storeImage:forKey:toDisk:,第三个参数为负数。
    SDImageCache.SharedImageCache.StoreImage (image: myImage, key: "myKey", toDisk: false);
    Using cache key filter

    有时你也许不想使用图像URL作为缓存键,因为URL可能是动态的. 下面的示例在应用程序的委托中设置一个过滤器,在使用它的缓存键之前将从URL中删除任何查询字符串

    public override bool FinishedLaunching (UIApplication app, NSDictionary options)
    {
    SDWebImageManager.SharedManager.SetCacheKeyFilter (url => {
    var stableUrl = new NSUrl (scheme: url.Scheme, host: url.Host, path: url.Path);
    return stableUrl.AbsoluteString;
    });
    ...
    }

    Using dynamic image size with UITableViewCell

    UITableView通过第一个单元格设置的图像决定图像的尺寸。如果您的远程图像没有图像占位符的大小相同,您可能会遇到奇怪的变形缩放问题。下面的文章给出了一个方法来解决这个问题:
    http://www.wrichards.com/blog/2011/11/sdwebimage-fixed-width-cell-images/

    Handle image refresh(控制图像刷新)

    默认情况下,SDWebImage确实非常积极的缓存。它忽略了所有类型的通过HTTP服务器返回的缓存控制头,并且没有时间限制地缓存返回的图像。这意味着你的图像url是永远不会改变的、指向图像的静态url。如果指向的图片发生了变化,那么url也会相应的跟着变化。

    如果你不控制你的图像服务器,当它的内容更新时你不能改变它的url。Facebook头像就是这种情况的例子。在这种情况下,你可以使用SDWebImageRefreshCached的标志。这将稍微降低性能,但将会考虑到HTTP缓存控制头:

    self.topImageView.sd_setImageWithURL(NSURL(string: imageNetURL), placeholderImage: UIImage(named: "nopic.jpg"), options: SDWebImageOptions.allZeros)

    //图片URL

    var imageNetURL:String = "http://www.szplanner.com/images/inside/product_thumb.jpg"

    //清理缓存

    SDImageCache.sharedImageCache().clearDisk()

    //获取缓存图片张数

    println("缓存张数\(SDImageCache.sharedImageCache().getDiskCount())")

    //判断本地缓存中是否存在网络中的图片

    println("是否存在\(SDImageCache.sharedImageCache().diskImageExistsWithKey(imageNetURL))")

    //直接从缓存中提取图片

    self.topImageView.image = SDImageCache.sharedImageCache().imageFromDiskCacheForKey(imageNetURL)

    //直接删除缓存中得图片

    SDImageCache.sharedImageCache().removeImageForKey(imageNetURL)
原文链接:http://www.jianshu.com/p/d6a2987ebf3e    文/_洪小瑶(简书作者)

swift SDWebImage使用的更多相关文章

  1. Swift使用SDWebImage处理远程图片资源

    第一步:配置SDWebImage 打开github,https://github.com/rs/SDWebImage,将SDWebImage下载到本地 用Xcode创建一个swift的singleVi ...

  2. 前不久一个swift项目用uicollectionview 用sdwebimage 加载图片,发生内存猛增,直接闪退的情况,简单说一下解决方案。

    1.首先在appdelegate方法 didFinishLaunchingWithOptions SDImageCache.sharedImageCache().maxCacheSize=1024*1 ...

  3. SDWebImage源码解读 之 NSData+ImageContentType

    第一篇 前言 从今天开始,我将开启一段源码解读的旅途了.在这里先暂时不透露具体解读的源码到底是哪些?因为也可能随着解读的进行会更改计划.但能够肯定的是,这一系列之中肯定会有Swift版本的代码. 说说 ...

  4. Swift 必备开发库 (高级篇) (转)

    1.CryptoSwift swift加密库, 支持md5,sha1,sha224,sha256... github地址: https://github.com/krzyzanowskim/Crypt ...

  5. Swift - 轮播图

    学写swift, 试着弄了一个轮播图, 仿照 HHBannerView的OC代码 Demo地址: https://github.com/liguoliangiOS/ZJGenWoYou.git 一.第 ...

  6. Swift 必备开发库10个

    1.CryptoSwift swift加密库, 支持md5,sha1,sha224,sha256... github地址: https://github.com/krzyzanowskim/Crypt ...

  7. swift 自定义图片轮播视图

    Swift封装图片轮播视图: import UIKit class XHAdLoopView: UIView { private var pageControl : UIPageControl? pr ...

  8. Android与Swift iOS开发:语言与框架对比

    Swift是现在Apple主推的语言,2014年新推出的语言,比Scala等“新”语言还要年轻10岁.2015年秋已经开源.目前在linux上可用,最近已经支持Android NDK:在树莓派上有Sw ...

  9. swift项目初体验--教你打造一款个性化图片浏览器(篇幅过大,慎入)

    项目需求:做一个图片浏览器,点击图片查看大图,大图模式下,左右滚动能查看不同的图片. 项目的主要核心技术:图片的弹出和消失动画     项目源代码: Photo-Browser   一.对代码进行重构 ...

随机推荐

  1. Linux基础: 挂载镜像文件(Mount & ISO)

    ISO/Ghost 镜像文件概念(裸机安装,无光驱安装,跨平台安装) ISO是镜像文件:所谓镜像文件其实和ZIP压缩包类似,它将特定的一系列文件按照一定的格式制作成单一的文件,以方便用户下载和使用,例 ...

  2. Android 反编译工具简介

    Android 反编译工具: 所需工具:1 apktool : 用于获取资源文件 2 dex2Jar : 用于将classes.dex转化成jar文件 2 jd-gui: 将jar文件转化成java文 ...

  3. Swift和Objective-C混编注意

    前言 Swift已推出数年,与Objective-C相比Swift的语言机制及使用简易程度上更接地气,大大降低了iOS入门门槛.当然这对新入行的童鞋们来讲,的确算是福音,但对于整个iOS编程从业者来讲 ...

  4. oracle第一章

    1.oracle对比sqlserver oracle sqlserver 数据文件.dbf 数据文件.mdf 控制文件.ctl   日志文件.log 日志文件.log     2.内置用户 1.sys ...

  5. hdu 1520

    Anniversary party Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others ...

  6. A-Making the Grade(POJ 3666)

    Making the Grade Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 4656   Accepted: 2206 ...

  7. apache 修改最大连接数

    1.在哪里设置? 服务器的为FreeBSD 6.2 ,apache 2.24,使用默认配置(FreeBSD 默认不加载自定义MPM配置),默认最大连接数是250 在/usr/local/etc/apa ...

  8. 让Windows下的Tomcat将控制台信息记录到日志

    在开发的过程中经常出现包冲突,却不知道怎么回事,可以在 catalina.bat 里面设置查看class加载日志   set CATALINA_OPTS=-server -Xdebug -Xnoage ...

  9. 转载——PLSQL developer 连接不上64位Oracle 解决办法

    前两天刚下载了oracle 11g 64位的最新版本,安装成功之后,再安装PLSQL.结果使用PLSQL访问数据库时,死活连接不上.报错如下: Could not load "……\bin\ ...

  10. 小记:获取系统时间的long值,格式化成可读时间。

    /** * 返回的字符串形式是形如:2013年10月20日 20:58 * */ public static String formatTimeInMillis(long timeInMillis) ...