zoukankan      html  css  js  c++  java
  • SDWebImage的一些简单使用

    SDWebImage是一个三方类库, 所以要使用它首先要把它引入我们的工程, 其托管在github上: https://github.com/rs/SDWebImage

    有几种引入的方法, 一种是直接使用cocoaPods下载安装, 还有一种是直接拉入文件夹, 我们就演示这一种了
    第一步: 把下载好的Demo中的"SDWebImage"文件拖入工程, 记得勾选


    第二步: 进入Bulid Phases-->Link Binary With Libraries, 点击'+', 引入框架:ImageIO.framework, MapKit.framework, libxml2.2.dylib


    第三步: 进入Bulid Setting , 在搜索栏搜索other link, 修改Other Linker Flags 为-ObjC:


    OK! 现在我们可以进入正题了, 官方是在UITableView中演示的SDWebImage的使用, 我觉得tabView的显示没集合视图的好看, 所以我就用UICOllectionView来演示了
    先引入SDWebImage的头文件: #import "UIImageView+WebCache.h"


    创建集合视图, 这步省略了, 也可以用UITableView;
    搜索一些图片的url, 创建为全局变量, 因为后面还要使用


    老版本的SDWebImage中的方法和新版本的有些许的不同, 就是新版本的方法新都有"sd_"的前缀. 我用的是新版本的, 所以如果你找的是旧版本的话会发现我们的方法不太一样

    先来一个基本的语句吧: - (void)sd_setImageWithURL:(NSURL *)url placeholderImage:(UIImage *)placeholder
    UIImageView调用它, url是要下载的图片的url, placeholder是在图片还没下载完成是imgView显示的占位图片, 当图片下载完成后, 它会被替换成下载好的图片, 如图:

    其中的四张相同的图片就是我设置的占位图片.

    再创建一个ViewController, 用以显示每张缩略图的大图, 并push进去, 把小图的indexPath, 和urlString传入
    SDWebImage除了刚才用的那种外还有几种比较简单的方法, 总的代码总结如下:

    //1. 基本语句, 异步加载及缓存图片一步到位
     

        [imgView sd_setImageWithURL: url placeholderImage: [UIImage imageNamed:@"3"]];
        

         //2. 读取缓存, 有占位图片, 可从url下载图片
         //Handle image refresh(控制图像刷新)
         //默认情况下,SDWebImage确实非常积极的缓存。它忽略了所有类型的通过HTTP服务器返回的缓存控制头,并且没有时间限制地缓存返回的图像。 这意味着你的图像url是永远不会改变的、指向图像的静态url。如果指向的图片发生了变化,那么url也会相应的跟着变化。如果你不控制你的图像服务 器,当它的内容更新时你不能改变它的url。Facebook头像就是这种情况的例子。在这种情况下,你可以使用 SDWebImageRefreshCached的标志。这将稍微降低性能,但将会考虑到HTTP缓存控制头:
         [imgView sd_setImageWithURL:url placeholderImage:[UIImage imageNamed:@"3"] options:SDWebImageRefreshCached];


         //3. block
         [imgView sd_setImageWithURL:url completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, NSURL *imageURL) {
              if (image) {
                   imgView.image = image;
              }
         }];


         //4. 管理
         SDWebImageManager *imageManager = [SDWebImageManager sharedManager];
         [imageManager downloadImageWithURL:url options:0 progress:^(NSInteger receivedSize, NSInteger expectedSize) {

         } completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, BOOL finished, NSURL *imageURL) {
              if (image) {
                   imgView.image = image;
              }
         }];
        
         //5. 使用blocks,你将被告知下载进度,完成时是成功还是失败:
         [imgView sd_setImageWithURL:url placeholderImage:[UIImage imageNamed:@"3"] completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, NSURL *imageURL) {
              if (error) {
                   NSLog(@"%@", error);
              }
         }];
        
         //6. 独立地使用异步图像下载
         [[SDWebImageDownloader sharedDownloader] downloadImageWithURL:url options:0 progress:^(NSInteger receivedSize, NSInteger expectedSize) {

         } completed:^(UIImage *image, NSData *data, NSError *error, BOOL finished) {
              if (image && finished) {
                   imgView.image = image;
              }
         }];

    最后效果图:

    SDWebImage的一些简单使用
  • 相关阅读:
    第二阶段冲刺第1天
    每周总结(5.30)
    每周总结(5.23)
    个人作业——顶会热词进程2.3
    个人作业——顶会热词进程2.2
    c#日期相关代码
    Linux服务器安装mysql
    Linux运行yum时出现/var/run/yum.pid已被锁定,PID为xxxx的另一个程序正在运行的问题解决
    【转】火狐浏览器js转换日期问题
    docker流程
  • 原文地址:https://www.cnblogs.com/shenhongbang/p/4361166.html
Copyright © 2011-2022 走看看