UIImageview + afnetworking下载图像并缓存图像。
但在某些情况下,服务器图像= 15mb。所以我需要根据某些因素对它们进行压缩,并使其达到1mb,然后需要缓存它们。
另一方面,SDWebImageCache使您可以定义自己的缓存并存储它们是否有任何内置机制可供下载,编辑,然后保存到缓存中?
[SDWebImageDownloader.sharedDownloader downloadImageWithURL:imageURL
options:0
progress:^(NSInteger receivedSize, NSInteger expectedSize)
{
// progression tracking code
}
completed:^(UIImage *image, NSData *data, NSError *error, BOOL finished)
{
if (image && finished)
{
// do something with image
}
}];
然后使用
[[SDImageCache sharedImageCache] storeImage:myImage forKey:myCacheKey]
还有其他替代做这样的事情吗?
答案 0 :(得分:1)
SDWebImage
的方案是正确的。
出于编辑目的,您需要将委托设置为SDWebImageManager
对象并实现必要的方法:
// Set delegate
[SDWebImageManager sharedManager].delegate = self;
// Implement delegate method
- (UIImage *)imageManager:(SDWebImageManager *)imageManager
transformDownloadedImage:(UIImage *)image
withURL:(NSURL *)imageURL {
UIImage scaledImage = ... // Make scale based on 'image' object
return scaledImage;
}
请注意,此方法在下载图像后立即调用,但在将其存储到内存缓存之前和调用完成块之前调用 此方法的文档:
允许在下载后立即转换图像 就在将它缓存在磁盘和内存之前。注意:此方法是 从全局队列调用,以便不阻塞主线程。
之后,您可以在问题中使用SDWebImageDownloader
和SDImageCache
:
[SDWebImageDownloader.sharedDownloader downloadImageWithURL:imageURL
options:0
progress:^(NSInteger receivedSize, NSInteger expectedSize) {
// progression tracking code
}
completed:^(UIImage *image, NSData *data, NSError *error, BOOL finished) {
if (image && finished) {
[[SDImageCache sharedImageCache] storeImage:image forKey:myCacheKey];
}
}];
然后,您可以使用SDImageCache
class:
- (NSOperation *)queryDiskCacheForKey:(NSString *)key done:(SDWebImageQueryCompletedBlock)doneBlock;
- (void)removeImageForKey:(NSString *)key fromDisk:(BOOL)fromDisk withCompletion:(SDWebImageNoParamsBlock)completion;
如果您需要按最大数据大小进行图像缩放的算法,请查看this答案。