该文章阅读的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