使用AFNetworking加载图像 - 调整大小

Dan*_*pos 6 objective-c uiimageview ios afnetworking

首先,我正在使用这种AFNetworking方法:

[imageView setImageWithURL:[NSURL URLWithString:@"http://site.com/img.png"]];
Run Code Online (Sandbox Code Playgroud)

1 -这个方法是异步的吗?它会在iPhone中缓存图像吗?

2 -如何裁剪/调整此图像的大小?我在URL中有一个800x600的图像,但我的UIImageView是400x400,我只想在显示之前裁剪url图像,相同的比例,如600x600(不需要400x400,只是相同的比例).喜欢facebook app.

Rob*_*Rob 17

调整大小已在其他地方得到解答,但对于您的第一个问题:

这个方法是异步的吗?

是的,它是异步的.如果要处理图像,可以使用回调块,例如:

[imageView setImageWithURLRequest:request
                 placeholderImage:nil
                          success:^(NSURLRequest *request, NSHTTPURLResponse *response, UIImage *image) {

                              // do image resize here

                              // then set image view

                              imageView.image = image;
                          }
                         failure:nil];
Run Code Online (Sandbox Code Playgroud)

然后你问:

它会在iPhone中缓存图像吗?

如果你只是因为性能原因而想要在内存中缓存,那么答案是肯定的.它采用了NSCache(在内存压力下将被清空).顺便说一句,它会将图像缓存为已检索的图像,而不会反映您事后调整后的大小.

如果您希望缓存在持久存储中(即即使您终止应用程序并重新启动它也会持续存在),那么这个问题就不太清楚了.AFNetworking声称通过其使用支持磁盘缓存NSURLCache,但我在使用iOS时遇到了问题.如果您需要持久存储缓存,我可能会建议其他各种UIImageView类别,例如SDWebImage.

无论如何,对于关于缓存的AFNetworking官方专线,我可能会向您推荐AFNetworking FAQ中缓存讨论.


如果您想要活动指示器视图,您可以:

UIActivityIndicatorView *activityIndicatorView = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray];
activityIndicatorView.center = self.imageView.center;
[self.view addSubview:activityIndicatorView];
[activityIndicatorView startAnimating];

[imageView setImageWithURLRequest:request
                 placeholderImage:nil
                          success:^(NSURLRequest *request, NSHTTPURLResponse *response, UIImage *image) {

                              [activityIndicatorView removeFromSuperview];

                              // do image resize here

                              // then set image view

                              imageView.image = image;
                          }
                          failure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error) {
                              [activityIndicatorView removeFromSuperview];

                              // do any other error handling you want here
                          }];
Run Code Online (Sandbox Code Playgroud)