1.UIImageView的基本使用
基本图片使用
[self.imageView sd_setImageWithURL:[NSURL URLWithString:@"图片URL"]];
带占位图的加载
[self.imageView sd_setImageWithURL:[NSURL URLWithString:@"图片URL"]
placeholderImage:[UIImage imageNamed:@"placeholder"]];
带完成回调的加载
[self.imageView sd_setImageWithURL:[NSURL URLWithString:@"图片URL"]
placeholderImage:[UIImage imageNamed:@"placeholder"]
completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, NSURL *imageURL) {
if (error) {
NSLog(@"图片加载失败: %@", error);
} else {
NSLog(@"图片加载成功,缓存类型: %ld", (long)cacheType);
}
}];
带进度条和完后回调
[self.imageView sd_setImageWithURL:[NSURL URLWithString:@"图片URL"]
placeholderImage:[UIImage imageNamed:@"placeholder"]
options:SDWebImageProgressiveLoad
progress:^(NSInteger receivedSize, NSInteger expectedSize, NSURL *targetURL) {
CGFloat progress = (CGFloat)receivedSize / expectedSize;
NSLog(@"下载进度: %.2f%%", progress * 100);
} completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, NSURL *imageURL) {
// 完成回调
}];
2.加载选项 (SDWebImageOptions)
常用的选项:
SDWebImageRetryFailed- 失败后自动重试
SDWebImageLowPriority- 低优先级下载
SDWebImageCacheMemoryOnly- 只内存缓存
SDWebImageProgressiveLoad- 渐进式加载
SDWebImageRefreshCached- 刷新缓存
SDWebImageContinueInBackground- 后台继续下载
// 常用选项组合
SDWebImageOptions options = SDWebImageRetryFailed |
SDWebImageLowPriority |
SDWebImageProgressiveLoad;
[self.imageView sd_setImageWithURL:url
placeholderImage:placeholder
options:options];
3.SDWebImageManager 管理类
SDWebImageManager *manager = [SDWebImageManager sharedManager];
// 加载图片
[manager loadImageWithURL:url
options:options
progress:^(NSInteger receivedSize, NSInteger expectedSize, NSURL *targetURL) {
// 进度回调
} completed:^(UIImage *image, NSData *data, NSError *error, SDImageCacheType cacheType, BOOL finished, NSURL *imageURL) {
if (image && finished) {
self.imageView.image = image;
}
}];
// 检查缓存
SDImageCacheType cacheType = [manager diskImageExistsForURL:url];
4.缓存管理
// 获取共享缓存实例
SDImageCache *imageCache = [SDImageCache sharedImageCache];
// 查询缓存
UIImage *cachedImage = [imageCache imageFromMemoryCacheForKey:key];
UIImage *cachedImage = [imageCache imageFromDiskCacheForKey:key];
// 存储图片
[imageCache storeImage:image forKey:key toDisk:YES];
// 清除缓存
[imageCache clearMemory]; // 清除内存缓存
[imageCache clearDiskOnCompletion:nil]; // 清除磁盘缓存
[imageCache deleteOldFilesWithCompletionBlock:nil]; // 删除旧文件
// 计算缓存大小
[imageCache calculateSizeWithCompletionBlock:^(NSUInteger fileCount, NSUInteger totalSize) {
NSLog(@"缓存文件数: %lu, 总大小: %.2f MB", (unsigned long)fileCount, totalSize / 1024.0 / 1024.0);
}];
5.下载器管理
SDWebImageDownloader *downloader = [SDWebImageDownloader sharedDownloader];
// 设置下载选项
downloader.downloadTimeout = 15.0;
downloader.executionOrder = SDWebImageDownloaderLIFOExecutionOrder;
// 自定义下载
[[SDWebImageDownloader sharedDownloader] downloadImageWithURL:url
options:0
progress:nil
completed:^(UIImage *image, NSData *data, NSError *error, BOOL finished) {
if (image && finished) {
// 下载完成
}
}];
6.加载WebP格式的图片
// 在 AppDelegate 中配置
#import <SDWebImageWebPCoder/SDImageWebPCoder.h>
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// 添加 WebP 支持
SDImageWebPCoder *webPCoder = [SDImageWebPCoder sharedCoder];
[[SDImageCodersManager sharedManager] addCoder:webPCoder];
return YES;
}
7.图片预览处理
[self.imageView sd_setImageWithURL:url
placeholderImage:placeholder
options:0
context:@{SDWebImageContextImageTransformer: [SDImageRoundCornerTransformer transformerWithRadius:10 corners:UIRectCornerAllCorners borderWidth:1 borderColor:[UIColor whiteColor]]}];
8.自定义缓存策略
// 自定义缓存键
NSString *customCacheKey = [NSString stringWithFormat:@"%@_%dx%d", url.absoluteString, (int)size.width, (int)size.height];
[self.imageView sd_setImageWithURL:url
placeholderImage:placeholder
options:0
context:@{SDWebImageContextCustomManager: customManager,
SDWebImageContextCacheKeyFilter: ^(NSURL *url) {
return customCacheKey;
}}];
9.高级图片加载
// 带上下文配置的加载
SDWebImageContext *context = @{
SDWebImageContextCustomManager: customManager,
SDWebImageContextImageTransformer: transformer
};
[self.imageView sd_setImageWithURL:url placeholderImage:placeholder options:options context:context];
// 带缩略图预览的加载(SDWebImage 5.0+)
[self.imageView sd_setImageWithURL:highQualityURL
placeholderImage:placeholder
thumbnailURL:thumbnailURL
options:0
progress:nil
completed:nil];
10.SDAnimatedImageView加载动态图片
// 创建动画图片视图
SDAnimatedImageView *animatedImageView = [[SDAnimatedImageView alloc] init];
// 加载 GIF/APNG 等动画图片
[animatedImageView sd_setImageWithURL:animatedImageURL];
// 控制动画
[animatedImageView startAnimating];
[animatedImageView stopAnimating];
// 设置动画循环次数
animatedImageView.shouldCustomLoopCount = YES;
animatedImageView.animationRepeatCount = 3;
11.图片预加载
// 预加载单张图片
[[SDWebImagePrefetcher sharedImagePrefetcher] prefetchURLs:@[url]];
// 预加载多张图片
NSArray *urls = @[url1, url2, url3, url4];
[[SDWebImagePrefetcher sharedImagePrefetcher] prefetchURLs:urls];
// 带进度和完成回调的预加载
SDWebImagePrefetcher *prefetcher = [SDWebImagePrefetcher sharedImagePrefetcher];
prefetcher.maxConcurrentDownloads = 3; // 最大并发数
[prefetcher prefetchURLs:urls progress:^(NSUInteger noOfFinishedUrls, NSUInteger noOfTotalUrls) {
CGFloat progress = (CGFloat)noOfFinishedUrls / noOfTotalUrls;
NSLog(@"预加载进度: %.2f%%", progress * 100);
} completed:^(NSUInteger noOfFinishedUrls, NSUInteger noOfSkippedUrls) {
NSLog(@"预加载完成: %lu 成功, %lu 跳过", (unsigned long)noOfFinishedUrls, (unsigned long)noOfSkippedUrls);
}];
// 取消预加载
[prefetcher cancelPrefetching];
12.图片转换器 (Image Transformer)
// 圆角转换器
SDImageRoundCornerTransformer *roundCornerTransformer = [SDImageRoundCornerTransformer transformerWithRadius:10 corners:UIRectCornerAllCorners borderWidth:1 borderColor:[UIColor redColor]];
// 缩放转换器
SDImageResizingTransformer *resizingTransformer = [SDImageResizingTransformer transformerWithSize:CGSizeMake(100, 100) scaleMode:SDImageScaleModeAspectFill];
// 旋转转换器
SDImageRotationTransformer *rotationTransformer = [SDImageRotationTransformer transformerWithAngle:M_PI_4 fitSize:YES];
// 使用转换器
[self.imageView sd_setImageWithURL:url placeholderImage:placeholder options:0 context:@{SDWebImageContextImageTransformer: roundCornerTransformer}];
// 多个转换器组合
SDImagePipelineTransformer *pipelineTransformer = [SDImagePipelineTransformer transformerWithTransformers:@[resizingTransformer, roundCornerTransformer]];
13.自定义缓存键和过滤器
// 自定义缓存键过滤器
SDWebImageCacheKeyFilter *cacheKeyFilter = [SDWebImageCacheKeyFilter cacheKeyFilterWithBlock:^NSString * _Nullable(NSURL * _Nullable url) {
// 移除查询参数
NSURLComponents *components = [NSURLComponents componentsWithURL:url resolvingAgainstBaseURL:NO];
components.query = nil;
return components.URL.absoluteString;
}];
// 自定义缓存路径过滤器
SDWebImageCacheSerializer *cacheSerializer = [SDWebImageCacheSerializer cacheSerializerWithBlock:^NSData * _Nullable(UIImage * _Nonnull image, NSData * _Nullable data, NSURL * _Nullable imageURL) {
// 自定义序列化逻辑
if (!data) {
return UIImageJPEGRepresentation(image, 0.8);
}
return data;
}];
// 使用自定义过滤器
[self.imageView sd_setImageWithURL:url placeholderImage:placeholder options:0 context:@{
SDWebImageContextCacheKeyFilter: cacheKeyFilter,
SDWebImageContextCacheSerializer: cacheSerializer
}];
14.图片下载操作管理
// 获取当前操作
id<SDWebImageOperation> operation = [self.imageView sd_setImageWithURL:url completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, NSURL *imageURL) {
// 完成回调
}];
// 取消单个操作
[operation cancel];
// 取消 UIImageView 的所有操作
[self.imageView sd_cancelCurrentImageLoad];
// 取消 UIButton 的所有操作
[self.button sd_cancelImageLoadForState:UIControlStateNormal];
15.高级缓存操作
SDImageCache *cache = [SDImageCache sharedImageCache];
// 查询缓存是否存在
[cache containsImageForKey:key cacheType:SDImageCacheTypeAll completion:^(SDImageCacheType containsCacheType) {
if (containsCacheType != SDImageCacheTypeNone) {
NSLog(@"图片已缓存");
}
}];
// 获取缓存路径
NSString *cachePath = [cache cachePathForKey:key];
// 获取缓存数据
[cache queryImageDataForKey:key options:0 context:nil completion:^(NSData * _Nullable data) {
// 处理原始数据
}];
// 存储图片到指定缓存类型
[cache storeImage:image imageData:data forKey:key cacheType:SDImageCacheTypeAll completion:nil];
// 移除特定图片
[cache removeImageForKey:key withCompletion:nil];
[cache removeImageForKey:key fromDisk:YES withCompletion:nil];
16.图片解码和编码
// 自定义解码器
id<SDImageCoder> customCoder = [[CustomImageCoder alloc] init];
[[SDImageCodersManager sharedManager] addCoder:customCoder];
// 移除解码器
[[SDImageCodersManager sharedManager] removeCoder:customCoder];
// 图片编码
NSData *imageData = [image sd_imageDataAsFormat:SDImageFormatPNG];
NSData *compressedData = [image sd_imageDataAsFormat:SDImageFormatJPEG compressionQuality:0.7];

1054

被折叠的 条评论
为什么被折叠?



