Ios 用于imageProcessingBlock的AF2网络迁移:

Ios 用于imageProcessingBlock的AF2网络迁移:,ios,Ios,我正在迁移到AF2 什么是替代品 [AFImageRequestOperation imageRequestOperationWithRequest:request imageProcessingBlock: ^UIImage *(UIImage *downloadedImage) { return [NIImageProcessing imageFromSource:downloadedImage

我正在迁移到AF2 什么是替代品

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