该文章阅读的SDWebImage的版本为4.3.3。
由于这几个分类都是UIImage
的分类,并且内容相对较少,就写在一篇文章中。
1.UIImage+ForceDecode
这个分类为UIImage
提供了解码的快捷方法。
1.1.公共方法
/**
解码指定的图像对象
*/
+ (nullable UIImage *)decodedImageWithImage:(nullable UIImage *)image;
复制代码
/**
解码并缩小指定的图像对象
*/
+ (nullable UIImage *)decodedAndScaledDownImageWithImage:(nullable UIImage *)image;
复制代码
1.2.实现
+ (UIImage *)decodedImageWithImage:(UIImage *)image {
// 如果没传图像对象就返回空
if (!image) {
return nil;
}
// 创建变量保存图像数据
NSData *tempData;
// 解压图像
return [[SDWebImageCodersManager sharedInstance] decompressedImageWithImage:image data:&tempData options:@{SDWebImageCoderScaleDownLargeImagesKey: @(NO)}];
}
复制代码
+ (UIImage *)decodedAndScaledDownImageWithImage:(UIImage *)image {
// 如果没传图像对象就返回空
if (!image) {
return nil;
}
// 创建变量保存图像数据
NSData *tempData;
// 解压并缩小图像
return [[SDWebImageCodersManager sharedInstance] decompressedImageWithImage:image data:&tempData options:@{SDWebImageCoderScaleDownLargeImagesKey: @(YES)}];
}
复制代码
2.UIImage+GIF
这个分类用于创建动图
2.1.公共方法
/**
根据图像数据创建图像对象
*/
+ (UIImage *)sd_animatedGIFWithData:(NSData *)data;
复制代码
/**
判断图像对象是否是动图
*/
- (BOOL)isGIF;
复制代码
2.2.实现
+ (UIImage *)sd_animatedGIFWithData:(NSData *)data {
// 如果没传图像数据就返回空
if (!data) {
return nil;
}
// 解码数据生成动图对象
return [[SDWebImageGIFCoder sharedCoder] decodedImageWithData:data];
}
复制代码
- (BOOL)isGIF {
// 根据images属性判断是否是动图
return (self.images != nil);
}
复制代码
3.UIImage+MultiFormat
这个分类提供了数据和图像互相转换的方法
3.1.公共属性
/**
动图循环次数
*/
@property (nonatomic, assign) NSUInteger sd_imageLoopCount;
复制代码
3.2.公共方法
/**
根据指定数据创建图像对象
*/
+ (nullable UIImage *)sd_imageWithData:(nullable NSData *)data;
复制代码
/**
获取图像对象的数据
*/
- (nullable NSData *)sd_imageData;
复制代码
/**
根据图像格式获取图像对象的数据
*/
- (nullable NSData *)sd_imageDataAsFormat:(SDImageFormat)imageFormat;
复制代码
3.3.实现
- (NSUInteger)sd_imageLoopCount {
NSUInteger imageLoopCount = 0;
NSNumber *value = objc_getAssociatedObject(self, @selector(sd_imageLoopCount));
if ([value isKindOfClass:[NSNumber class]]) {
imageLoopCount = value.unsignedIntegerValue;
}
return imageLoopCount;
}
- (void)setSd_imageLoopCount:(NSUInteger)sd_imageLoopCount {
NSNumber *value = @(sd_imageLoopCount);
objc_setAssociatedObject(self, @selector(sd_imageLoopCount), value, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
}
复制代码
+ (nullable UIImage *)sd_imageWithData:(nullable NSData *)data {
// 解码图像数据获取图像对象
return [[SDWebImageCodersManager sharedInstance] decodedImageWithData:data];
}
复制代码
- (nullable NSData *)sd_imageData {
// 以未知图像格式调用下面方法获取图像数据
return [self sd_imageDataAsFormat:SDImageFormatUndefined];
}
复制代码
- (nullable NSData *)sd_imageDataAsFormat:(SDImageFormat)imageFormat {
// 创建变量保存图像数据
NSData *imageData = nil;
// 通过编码获取图像数据
if (self) {
imageData = [[SDWebImageCodersManager sharedInstance] encodedDataWithImage:self format:imageFormat];
}
return imageData;
}
复制代码
源码阅读系列:SDWebImage
源码阅读:SDWebImage(二)——SDWebImageCompat
源码阅读:SDWebImage(三)——NSData+ImageContentType
源码阅读:SDWebImage(四)——SDWebImageCoder
源码阅读:SDWebImage(五)——SDWebImageFrame
源码阅读:SDWebImage(六)——SDWebImageCoderHelper
源码阅读:SDWebImage(七)——SDWebImageImageIOCoder
源码阅读:SDWebImage(八)——SDWebImageGIFCoder
源码阅读:SDWebImage(九)——SDWebImageCodersManager
源码阅读:SDWebImage(十)——SDImageCacheConfig
源码阅读:SDWebImage(十一)——SDImageCache
源码阅读:SDWebImage(十二)——SDWebImageDownloaderOperation
源码阅读:SDWebImage(十三)——SDWebImageDownloader
源码阅读:SDWebImage(十四)——SDWebImageManager
源码阅读:SDWebImage(十五)——SDWebImagePrefetcher
源码阅读:SDWebImage(十六)——SDWebImageTransition
源码阅读:SDWebImage(十七)——UIView+WebCacheOperation
源码阅读:SDWebImage(十八)——UIView+WebCache
源码阅读:SDWebImage(十九)——UIImage+ForceDecode/UIImage+GIF/UIImage+MultiFormat
源码阅读:SDWebImage(二十)——UIButton+WebCache
源码阅读:SDWebImage(二十一)——UIImageView+WebCache/UIImageView+HighlightedWebCache