美文网首页
SDWebImage学习

SDWebImage学习

作者: 夏天的风_song | 来源:发表于2017-03-06 16:41 被阅读0次

    一、一些使用文件的翻译


    HowToUse.md

    在tableView里使用UIImageView+WebCache 这个类别
    • 只需要import UIImageView+WebCache.h 这个头文件,并且在tableView:cellForRowAtIndexPath: UITableViewDataSource方法里使用sd_setImageWithURL:placeholderImage:
      我们会为你处理好所有问题,包括异步下载和缓存管理
      1. objective-c
        (<SDWebImage/UIImageView+WebCache.h>)
    -(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
        static NSString *MyIdentifier = @"MyIdentifier";
    
        UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:MyIdentifier];
        if (cell == nil) {
            cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault
                                           reuseIdentifier:MyIdentifier] autorelease];
        }
    
        // Here we use the new provided sd_setImageWithURL: method to load the web image
        [cell.imageView sd_setImageWithURL:[NSURL URLWithString:@"http://www.domain.com/path/to/image.jpg"]
                          placeholderImage:[UIImage imageNamed:@"placeholder.png"]];
    
        cell.textLabel.text = @"My Text";
        return cell;
    }
    
    • 2.swift
    import SDWebImage
    ...
    func tableView(tableView: UITableView!, cellForRowAtIndexPath indexPath: NSIndexPath!) -> UITableViewCell! {
        static let myIdentifier = "MyIdentifier"
        let cell = tableView.dequeueReusableCellWithIdentifier(myIdentifier, forIndexPath: indexPath) as UITableViewCell
    
        cell.imageView.sd_setImageWithURL(imageUrl, placeholderImage:placeholderImage)
        return cell
    
    使用block

    在block里面,你可以就下载进度进行通知,也可以就图片下载完成或者是失败进行通知

    // Here we use the new provided sd_setImageWithURL: method to load the web image
    [cell.imageView sd_setImageWithURL:[NSURL URLWithString:@"http://www.domain.com/path/to/image.jpg"]
                      placeholderImage:[UIImage imageNamed:@"placeholder.png"]
                             completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, NSURL *imageURL) {
                                    ... completion code here ...
                                 }];
    

    注意:如果你的图片下载请求在图片下载完成前取消了,那么它既不会进入成功回调的block,也不会进入失败回调的block
    Note: neither your success nor failure block will be call if your image request is canceled before completion.

    使用SDWebImageManager

    SDWebImageManagerUIImageView(WebCache)的子类,它把异步下载和图片缓存结合起来,从web上下载的缓存到本地的图片,在别的情况下用的的时候,你可以直接使用他。
    The `SDWebImageManager` is the class behind the `UIImageView(WebCache)` category. It ties the asynchronous downloader with the image cache store. You can use this class directly to benefit from web image downloading with caching in another context than a `UIView` (ie: with Cocoa).

    下面这个例子说明如何使用SDWebImageManager
    SDWebImageManager *manager = [SDWebImageManager sharedManager];
    [manager loadImageWithURL:imageURL
                      options:0
                     progress:^(NSInteger receivedSize, NSInteger expectedSize) {
                            // progression tracking code
                     }
                     completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, BOOL finished, NSURL *imageURL) {
                        if (image) {
                            // do something with image
                        }
                     }];
    
    单独使用异步下载
    SDWebImageDownloader *downloader = [SDWebImageDownloader sharedDownloader];
    [downloader downloadImageWithURL:imageURL
                             options:0
                            progress:^(NSInteger receivedSize, NSInteger expectedSize) {
                                // progression tracking code
                            }
                           completed:^(UIImage *image, NSData *data, NSError *error, BOOL finished) {
                                if (image && finished) {
                                    // do something with image
                                }
                            }];
    

    单独使用异步图片缓存

    • 还可以独立地使用基于异步的图像缓存存储。 SDImageCache维护内存缓存和可选磁盘缓存。执行磁盘高速缓存写入操作

    • 异步,因此它不会向UI添加不必要的延迟。

    • 为了方便,SDImageCache类提供了一个单例实例,但是您可以创建自己的实例

    • 实例化这个类如果你想要创建单独的高速缓存命名空间。

    • 要查找缓存,您可以使用queryDiskCacheForKey:done:方法。如果该方法返回nil,则意味着缓存
      目前不拥有该图片。因此,您负责生成和缓存它。缓存
      key是要缓存的图像的应用程序唯一标识符。它一般情况下来说是严格URL图片

    objective-c:
    SDImageCache *imageCache = [[SDImageCache alloc] initWithNamespace:@"myNamespace"];
    [imageCache queryDiskCacheForKey:myCacheKey done:^(UIImage *image) {
        // image is not nil if image was found
    }];
    
    [[SDImageCache sharedImageCache] storeImage:myImage forKey:myCacheKey];
    
    • 默认情况下,如果在内存缓存中找不到映像,SDImageCache将查找磁盘缓存。
      你可以通过调用替代方法imageFromMemoryCacheForKey:来防止这种情况的发生。
    objective-c
    [[SDImageCache sharedImageCache] storeImage:myImage forKey:myCacheKey];
    

    默认情况下,图片将被保存到内存中,同时也保存在磁盘上(他们是异步执行的)。如果,你只想让他保存在磁盘上,你可以替代方法storeImage:forKey:toDisk:,第三个参数填:NO

    使用缓存键过滤器

    有时,您可能不想使用图片网址作为缓存键,因为网址的一部分是动态的(即:用于访问控制目的)。 SDWebImageManager提供了一种设置缓存密钥过滤器的方法
    以NSURL作为输入,并输出高速缓存密钥NSString。

    以下示例在应用程序委托中设置一个过滤器,它将从中删除任何查询字符串在使用它之前的URL作为缓存键:

    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
        SDWebImageManager.sharedManager.cacheKeyFilter = ^(NSURL *url) {
            url = [[NSURL alloc] initWithScheme:url.scheme host:url.host path:url.path];
            return [url absoluteString];
        };
    
        // Your app init code...
        return YES;
    }
    

    ManualInstallation.md

    为获得所有文件的使用权限,你需要clone他
    git clone --recursive https://github.com/rs/SDWebImage.git
    
    检查一下依赖库和描述文件
    添加依赖库
    • 在app的target设置那里,找到"Build Phases"选项,并且打开"Link Binary With Libraries"
    • 点击"+" 按钮,并且选择"ImageIO.framework"选项,当你的项目需要渐进式下载功能的时候
    添加连接标识(Add Linker Flag)
    • 在app的target设置那里,找到"Build Settings"区域,找到"Other Linker Flags"设置项,添加"-ObjC"标识


      Other Linker FlagsOther Linker Flags

      或者是,如果可扩展框架(Parse, RestKit or opencv2)导致编译错误,用下列方式代替" -ObjC flag"

    -force_load SDWebImage.framework/Versions/Current/SDWebImage
    

    如果你用的是Cocoa Pods,并且有同样的问题,用下列方式代替" -ObjC flag"

    -force_load $(TARGET_BUILD_DIR)/libPods.a
    
    $(inherited)
    

    相关文章

      网友评论

          本文标题:SDWebImage学习

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