該文章閱讀的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