OC中SDWebImage基本使用详情

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];

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值