AFnetworking 2.0:在缓存之前的过程数据
-
21-12-2019 - |
题
有没有办法改变一些数据 - 更具体地说:图像 - 在缓存之前?
我从一个不合理的API下载图像。我想在他们到达时立即向下扩展它们,以便他们需要更少的空间,并且每次从缓存加载时都不要扩展它们。
我可以在AFImageResponseSerializer
的子类中或在STAHTTPRequestOperation
的子类中进行缩放。但在任何一种情况下,图像都在原始大小中缓存。
如何在写入缓存之前访问和更改数据?
解决方案
要回答我自己的问题:我通过在我的操作类中覆盖生成的世代odicetagcode来实现它。
@implementation MYImageRequestOperation
-(CGSize)size
{
return CGSizeZero; // overwritten in subclasses
}
-(NSCachedURLResponse *)connection:(NSURLConnection *)connection willCacheResponse:(NSCachedURLResponse *)cachedResponse
{
UIImage *image = [UIImage imageWithData:cachedResponse.data];
GPUImageLanczosResamplingFilter *resizingFilter = [[GPUImageLanczosResamplingFilter alloc] init];
CGFloat scale = [UIScreen mainScreen].scale;
CGSize size = [self size];
[resizingFilter forceProcessingAtSizeRespectingAspectRatio: CGSizeMake(size.width * scale, size.height * scale)];
GPUImagePicture *gpuImage = [[GPUImagePicture alloc] initWithImage:image];
[gpuImage addTarget:resizingFilter];
[gpuImage processImage];
UIImage *smallImage = [resizingFilter imageFromCurrentlyProcessedOutput];
NSData *data;
if([[cachedResponse.response.MIMEType lowercaseString] isEqualToString:@"image/png"])
{
data = UIImagePNGRepresentation(smallImage);
} else {
data = UIImageJPEGRepresentation(smallImage, .9);
}
NSCachedURLResponse *response = [[NSCachedURLResponse alloc] initWithResponse:cachedResponse.response data:data];
return response;
}
@end
. 不隶属于 StackOverflow