Ios 用于imageProcessingBlock的AF2网络迁移:
我正在迁移到AF2 什么是替代品Ios 用于imageProcessingBlock的AF2网络迁移:,ios,Ios,我正在迁移到AF2 什么是替代品 [AFImageRequestOperation imageRequestOperationWithRequest:request imageProcessingBlock: ^UIImage *(UIImage *downloadedImage) { return [NIImageProcessing imageFromSource:downloadedImage
[AFImageRequestOperation imageRequestOperationWithRequest:request imageProcessingBlock:
^UIImage *(UIImage *downloadedImage) {
return [NIImageProcessing imageFromSource:downloadedImage
withContentMode:contentMode
cropRect:cropRect
displaySize:displaySize
scaleOptions:self.scaleOptions
interpolationQuality:self.interpolationQuality];
} success:^(NSURLRequest *successfulRequest, NSHTTPURLResponse *response, UIImage *processedImage) {
[self _didFinishLoadingWithImage:processedImage
cacheIdentifier:pathToNetworkImage
displaySize:displaySize
contentMode:contentMode
scaleOptions:self.scaleOptions
expirationDate:nil];
} failure:^(NSURLRequest *errorRequest, NSHTTPURLResponse *response, NSError *error) {
[self _didFailToLoadWithError:error];
}];
这是来自Nimbus->NINetworkImageView.m的
请建议。在AFNetworking 2.0中,您应该使用AFHTTPRequestOperation的属性
@property (nonatomic, strong) AFHTTPResponseSerializer <AFURLResponseSerialization> * responseSerializer;
要设置完成块,请使用AFHTTPRequestOperation的方法:
- (void)setCompletionBlockWithSuccess:(void (^)(AFHTTPRequestOperation *operation, id responseObject))success
failure:(void (^)(AFHTTPRequestOperation *operation, NSError *error))failure;
要创建操作,还可以使用AFHTTPRequestOperationManager的方法
- (AFHTTPRequestOperation *)GET:(NSString *)URLString
parameters:(id)parameters
success:(void (^)(AFHTTPRequestOperation *operation, id responseObject))success
failure:(void (^)(AFHTTPRequestOperation *operation, NSError *error))failure
更新:
如果想要自定义图像处理逻辑,应该创建AFImageResponseSerializer
s子类并实现方法
- (id)responseObjectForResponse:(NSURLResponse *)response
data:(NSData *)data
error:(NSError *__autoreleasing *)error
例如:
@interface MyImageResponseSerializer : AFImageResponseSerializer
@end
@implementation MyImageResponseSerializer
- (id)responseObjectForResponse:(NSURLResponse *)response
data:(NSData *)data
error:(NSError *__autoreleasing *)error
{
UIImage *img = [super responseObjectForResponse:response
data:data
error:error];
// add a watermark to img or do something else
return img;
}
@end
然后将其设置为操作的responseSerializer
属性
operation.responseSerializer = [MyImageResponseSerializer serializer];
谢天谢地,问题解决了
我查看了最近使用AF2.2的Nimbus
步骤:
1:从最新项目复制了NIImageResponseSerializer Class.h和.m文件
2:从最新项目复制了以下4个功能
- (void)SetPathTonNetworkImage:(NSString*)PathTonNetworkImage for displaySize:(CGSize)displaySize contentMode:(UIViewContentMode)contentMode cropRect:(CGRect)cropRect
- (NSString*)cacheKeyForCacheIdentifier:(NSString*)cacheIdentifier imageSize:(CGSize)imageSize cropRect:(CGRect)cropRect contentMode:(UIViewContentMode)contentMode 缩放选项:(NINetworkImageViewScaleOptions)缩放选项
- (NSDate*)到期日期
- (void)\u使用image:(UIImage*)image完成加载 cacheIdentifier:(NSString*)cacheIdentifier displaySize:(CGSize)displaySize cropRect:(CGRect)cropRect contentMode:(UIViewContentMode)contentMode 缩放选项:(NINetworkImageViewScaleOptions)缩放选项 到期日期:(NSDate*)到期日期
作为参考,我正在迁移到AFNetworking 2.2,该版本在之前添加到我的项目中,我正在使用Nimbus(旧版本)进行水平照片滚动功能。是的,我知道,但imageProcessingBlock的位置:@user3427687,我已更新了答案。我没有测试它,但我希望它没有严重错误。@user3427687如果答案有用,请不要忘记接受/投票。
operation.responseSerializer = [MyImageResponseSerializer serializer];