美文网首页
SDWebImage 简单使用

SDWebImage 简单使用

作者: 你duck不必呀 | 来源:发表于2019-05-05 16:06 被阅读0次

    SDWebImage下载图片

    1.快速使用

    #import <SDWebImage.h>包含头文件,或者放在pch文件里
    初始化一个UIImageView之后;

    //默认会从缓存取,没有在从网络加载
    [self.imageView sd_setImageWithURL:self.imageUrl placeholderImage:nil options:SDWebImageProgressiveLoad   context:nil progress:^(NSInteger receivedSize, NSInteger expectedSize, NSURL * _Nullable targetURL) {
            NSLog(@"%lu",receivedSize/expectedSize);//进度
        } completed:^(UIImage * _Nullable image, NSError * _Nullable error, SDImageCacheType cacheType, NSURL * _Nullable imageURL) {
            if (image){
                //完成之后对图片的处理
            }
        }];
    

    /*参数依次是
    1.图片的url
    2.默认图片
    3.选项SDWebImageOptions
    4.context
    5.下载进度
    6.完成block
    */
    主要是这个方法,其他的都是对这个的分装

    - (void)sd_setImageWithURL:(nullable NSURL *)url {
        [self sd_setImageWithURL:url placeholderImage:nil options:0 progress:nil completed:nil];
    }
    - (void)sd_setImageWithURL:(nullable NSURL *)url placeholderImage:(nullable UIImage *)placeholder {
        [self sd_setImageWithURL:url placeholderImage:placeholder options:0 progress:nil completed:nil];
    }
    - (void)sd_setImageWithURL:(nullable NSURL *)url placeholderImage:(nullable UIImage *)placeholder options:(SDWebImageOptions)options {
        [self sd_setImageWithURL:url placeholderImage:placeholder options:options progress:nil completed:nil];
    }
    
    - (void)sd_setImageWithURL:(nullable NSURL *)url placeholderImage:(nullable UIImage *)placeholder options:(SDWebImageOptions)options context:(nullable SDWebImageContext *)context {
        [self sd_setImageWithURL:url placeholderImage:placeholder options:options context:context progress:nil completed:nil];
    }
    
    - (void)sd_setImageWithURL:(nullable NSURL *)url completed:(nullable SDExternalCompletionBlock)completedBlock {
        [self sd_setImageWithURL:url placeholderImage:nil options:0 progress:nil completed:completedBlock];
    }
    
    - (void)sd_setImageWithURL:(nullable NSURL *)url placeholderImage:(nullable UIImage *)placeholder completed:(nullable SDExternalCompletionBlock)completedBlock {
        [self sd_setImageWithURL:url placeholderImage:placeholder options:0 progress:nil completed:completedBlock];
    }
    
    - (void)sd_setImageWithURL:(nullable NSURL *)url placeholderImage:(nullable UIImage *)placeholder options:(SDWebImageOptions)options completed:(nullable SDExternalCompletionBlock)completedBlock {
        [self sd_setImageWithURL:url placeholderImage:placeholder options:options progress:nil completed:completedBlock];
    }
    
    - (void)sd_setImageWithURL:(nullable NSURL *)url placeholderImage:(nullable UIImage *)placeholder options:(SDWebImageOptions)options progress:(nullable SDImageLoaderProgressBlock)progressBlock completed:(nullable SDExternalCompletionBlock)completedBlock {
        [self sd_setImageWithURL:url placeholderImage:placeholder options:options context:nil progress:progressBlock completed:completedBlock];
    }
    
    

    2. SDWebImageManager

    SDWebImageManager是管理整个框架的类
    @property (nonatomic, class, readonly, nonnull) SDWebImageManager *sharedManager;
    属性里面的class关键字,会生产+开头的get,set方法,但是没有实例变量。上面代码有readonly修饰,就只有get方法
    下面这两行代码结果是一样的(.语法本质就是调用该属性的get方法)
    用sharedManager属性,会产生SDWebImage默认的单例

    SDWebImageManager.sharedManager 
    [SDWebImageManager sharedManager] 
    
    

    自定义初始化

    //默认会从缓存取,没有在从网络加载
    - (nonnull instancetype)initWithCache:(nonnull id<SDImageCache>)cache loader:(nonnull id<SDImageLoader>)loader;
    

    下载图片

    - (SDWebImageCombinedOperation *)loadImageWithURL:(nullable NSURL *)url
                                              options:(SDWebImageOptions)options
                                              context:(nullable SDWebImageContext *)context
                                             progress:(nullable SDImageLoaderProgressBlock)progressBlock
                                            completed:(nonnull SDInternalCompletionBlock)completedBlock 
    

    1.参数url 图片的url
    2.参数options 选项(枚举后文)
    3.参数context
    4.progress下载进度block ,(NSInteger receivedSize, NSInteger expectedSize, NSURL * _Nullable targetURL)已下载size,总的size,图片url
    5.completed完成block(UIImage * _Nullable image, NSData * _Nullable data, NSError * _Nullable error, SDImageCacheType cacheType, BOOL finished, NSURL * _Nullable imageURL)图片对象image,(NSData *)data,error错误信息,缓存类型,完成状态,图片url

    - (SDWebImageCombinedOperation *)loadImageWithURL:(NSURL *)url 
                                              options:(SDWebImageOptions)options 
                                             progress:(SDImageLoaderProgressBlock)progressBlock 
                                            completed:(SDInternalCompletionBlock)completedBlock
    

    是对第一个方法的封装

    - (void)cancelAll;取消所有下载任务

    [SDWebImageManager.sharedManager cancelAll];
    

    SDWebImageOptions枚举

    SDWebImageRetryFailed如果下载失败,url不会被加入黑名单,SDWebImage还是会再次尝试下载

    SDWebImageLowPriority 在你交互的时候(手指还在滑动屏幕)图片不会下载,交互完了(手机离开屏幕)就会下载
    SDWebImageProgressiveLoad边下载边显示图片,直到下载完成全部显示
    SDWebImageRefreshCached一个图片缓存了,还是会重新请求.并且缓存侧略依据NSURLCache而不是SDWebImageCache
    SDWebImageContinueInBackground在后台下载
    SDWebImageHandleCookies 可以控制存在NSHTTPCookieStore的cookies.
    SDWebImageAllowInvalidSSLCertificates 允许不安全的SSL证书
    SDWebImageHighPriority 默认情况下,image在装载的时候是按照他们在队列中的顺序装载的(就是先进先出).这个flag会把他们移动到队列的前端,并且立刻装载,而不是等到当前队列装载的时候再装载.
    SDWebImageDelayPlaceholder默认情况下,占位图会在图片下载的时候显示.这个flag开启会延迟占位图显示的时间,等到图片下载完成之后才会显示占位图.
    SDWebImageTransformAnimatedImage
    SDWebImageAvoidAutoSetImage默认情况下,图片是在下载完成后加载到图片视图。但是在一些情况下,我们想要在设置图片之前进行图片处理(比如,提供一个过滤或添加一个折叠动画)。使用这个标志,如果你想在下载成功后在完成块中手动设置图片。
    SDWebImageScaleDownLargeImages默认情况下,图片解码为原始的大小。在iOS,这个标志会把图片缩小到与设备的受限内容相兼容的大小。如果设置了SDWebImageProgressDownload标志,那么缩小被设置为无效。
    SDWebImageQueryMemoryData默认情况下,当图像已经缓存到内存中时,我们不会查询图像数据。该掩码可以强制同时查询图像数据。但是,除非指定“SDWebImageQueryMemoryDataSync”,否则此查询是异步的。
    SDWebImageQueryMemoryDataSync默认情况下,当您只指定“SDWebImageQueryMemoryData”时,我们异步地查询内存图像数据。结合该掩码还可以同步查询内存图像数据。
    SDWebImageQueryDiskDataSync默认情况下,当内存缓存丢失时,我们异步地查询磁盘缓存。这个掩码可以强制同步查询磁盘缓存(当内存缓存丢失时)。
    SDWebImageFromCacheOnly默认情况下,当缓存丢失时,映像将从加载器加载。此标志仅能防止从缓存加载。
    SDWebImageFromLoaderOnly和上一个相反, 默认情况下,我们在从加载器加载映像之前查询缓存。此标志仅能阻止从加载器加载。
    SDWebImageForceTransition默认情况下,当您使用“SDWebImageTransition”在图像加载完成后进行一些视图转换时,此转换仅应用于从网络下载图像。这个掩码还可以强制为内存和磁盘缓存应用视图转换。
    SDWebImageAvoidDecodeImage默认情况下,我们将在缓存查询和从网络下载时解码后台图像。这有助于提高性能,因为在屏幕上呈现图像时,首先需要解码。但这发生在Core Animation的主队列上。
    然而,这个过程也可能增加内存使用量。如果您正在经历一个问题,由于过多的内存消耗,这个标志可以防止解码图像。
    SDWebImageDecodeFirstFrameOnly默认情况下,我们解码动画图像。此标志仅能强制解码第一帧并生成静态图像。
    SDWebImagePreloadAllFrames默认情况下,对于“SDAnimatedImage”,我们在渲染时解码动画图像帧,以减少内存使用。但是,当大量imageViews共享动画图像时,可以指定将所有帧预加载到内存中,以减少CPU使用。这将在后台队列中触发“preloadAllAnimatedImageFrames”(仅限磁盘缓存和下载)。

    3.使用SDWebImageDownloader

     SDWebImageDownloader *download=[SDWebImageDownloader sharedDownloader];
    
    不会缓存图片,如果要想缓存需要手动缓存
     [download downloadImageWithURL:self.imageUrl options:0 progress:^(NSInteger receivedSize, NSInteger expectedSize, NSURL * _Nullable targetURL) {
        } completed:^(UIImage * _Nullable image, NSData * _Nullable data, NSError * _Nullable error, BOOL finished) {
        }];
    

    相关文章

      网友评论

          本文标题:SDWebImage 简单使用

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