BBASMSDWebImageUtil.h 4.73 KB
//
//  BBASMSDWebImageUtil.h
//  BBAMNP
//
//  Created by yangshuo on 2020/11/13.
//

#import <Foundation/Foundation.h>
#import <BBAImageView/BBAImageView.h>

NS_ASSUME_NONNULL_BEGIN

/// 运行时调度,兼容sdweb不同版本的api
/// 参考SDWebImage迁移文档:
/// 3.x -> 4.x版本:https://github.com/SDWebImage/SDWebImage/blob/master/Docs/SDWebImage-4.0-Migration-guide.md
/// 4.x -> 5.x版本:https://github.com/SDWebImage/SDWebImage/blob/b57eae42df0bbaa726cf3b00964d17fd177789a2/Docs/SDWebImage-5.0-Migration-guide.md

@interface BBASMSDWebImageUtil : NSObject

/// 对SDWebImage的sd_setImageWithURL:进行封装
/// @param url 图片远端地址
/// @param imageView imageView 视图
+ (void)setImageWithURL:(NSURL *)url inImageView:(UIImageView *)imageView;

/// 对SDWebImage的sd_setImageWithURL:placeholderImage:进行封装
/// @param url 图片远端地址
/// @param placeHolderImage 占位图
/// @param imageView imageView 视图
+ (void)setImageWithURL:(NSURL *)url placeholderImage:(UIImage *)placeHolderImage inImageView:(UIImageView *)imageView;

/// 对SDWebImage的sd_setImageWithURL:placeholderImage:进行封装
/// @param url 图片远端地址
/// @param placeHolderImage 占位图
/// @param completedBlock 下载完成回调
/// @param imageView imageView 视图
+ (void)setImageWithURL:(nullable NSURL *)url
       placeholderImage:(UIImage *)placeHolderImage
              completed:(void(^)(UIImage *image, NSError *error, SDImageCacheType cacheType, NSURL *imageURL))completedBlock
            inImageView:(UIImageView *)imageView;

/// 对[SDWebImageDownloader sharedDownloader] downloadImageWithURL:options:progressBlock:completedBlock的封装
/// @param url url 图片远端地址
/// @param options 下载选项配置
/// @param progressBlock 进度
/// @param completedBlock 完成
+ (void)downloadImageWithURL:(nullable NSURL *)url
                     options:(SDWebImageDownloaderOptions)options
                    progress:(void(^)(NSInteger receivedSize, NSInteger expectedSize, NSURL * _Nullable targetURL))progressBlock
                   completed:(void(^)(UIImage *image, NSData *data, NSError *error, BOOL finished))completedBlock;

/// 对SDImageCache storeImage:forkey:completion的封装,兼容不同SDImageView版本
/// @param image image
/// @param key 存储key
+ (void)storeImage:(nullable UIImage *)image forKey:(NSString *)key completion:(SDWebImageNoParamsBlock)completionBlock;

/// 给Button设置背景图片,对sd_setBackgroundImageWithURL:forState的封装
/// @param url 图片远端地址
/// @param state button状态
/// @param button button视图
+ (void)setBackgroundImageWithURL:(nullable NSURL *)url
                         forState:(UIControlState)state
                         inButton:(UIButton *)button;

/// 转换webpData到image,如果宿主引用SDWebImage/WebP了实现了sd_imageWithWebPData:会在运行时调用,否则需要宿主去实现
/// @param data webpData
+ (UIImage *_Nullable)imageWithWebPData:(NSData *)data;

///  对SDWebImage下的,imageDataForKey和diskImageDataBySearchingAllPathsForKey进行桥接,以适配不同版本的SDWebImage
/// @param key 请求url
/// @param imageCache 缓存
+ (NSData *_Nullable)diskImageDataBySearchingAllPathsForKey:(NSString *)key
                                                 imageCache:(SDImageCache *)imageCache;

/// 删除硬盘缓存
+ (void)removeDiskCachePath:(SDImageCache *)imageCache;

/// 设置是否内存缓存,shouldCacheImagesInMemory(SDImageCache 4.x ) ->  SDImageCacheConfig(5.x)
/// @param shouldCacheImagesInMemory NO,不设置
/// @param imageCache imageCache
+ (void)shouldCacheImagesInMemory:(BOOL)shouldCacheImagesInMemory
                       imageCache:(SDImageCache *)imageCache;

/// imagedata的数据类型,返回image/jpeg等
/// @param data data
+ (NSString *)contentTypeForImageData:(NSData *)data;

/// 清理磁盘
/// @param imageCache imageCache
+ (SDWebImageManager *)imageManageWithCache:(SDImageCache *)imageCache
                                     loader:(SDWebImageDownloader *)loader;

/// 查询缓存图片是否存在
/// @param url url
/// @param manager manager
+ (BOOL)cachedImageExistsForURL:(NSURL *)url
                        manager:(SDWebImageManager *)manager;

/// 获取SDWebImageManager的downloader,对[manager imageLoader]的封装,兼容不同SDImageView版本
/// @param manager manager
+ (SDWebImageDownloader *)getDownloaderOfManager:(SDWebImageManager *)manager;

/// 读取SDImageLoader的session
/// @param downloader downloader
+ (NSURLSession *)getSessionOfDownloader:(NSObject *)downloader;

/// 设置SDImageLoader的session
/// @param session session
/// @param downloader downloader
+ (void)setSession:(NSURLSession *)session inDownloader:(NSObject *)downloader;

@end

NS_ASSUME_NONNULL_END