带有动画的UIImageView + AFNetworking setImageWithURL [英] UIImageView+AFNetworking setImageWithURL with animation
问题描述
使用AFNetworking,从服务器下载图像并将其放入UIImageView非常简单:
With AFNetworking, is very simple to download an image from a server and put into an UIImageView:
[imageView setImageWithURL:[NSURL URLWithString:@"http://i.imgur.com/r4uwx.jpg"] placeholderImage:[UIImage imageNamed:@"placeholder-avatar"]];
如果我想用某种效果(也许是褪色的)替换图像呢?
How about if I want to do this replacement of image with an effect (maybe fade)???
这是因为我想制作包含很多图像的幻灯片.
It's because I want to make a slideshow with a lot of images.
推荐答案
您可以将animateWithDuration
与提供success
块的setImageWithURL
呈现形式结合使用,例如
You can use animateWithDuration
in conjunction with the rendition of setImageWithURL
that supplies the success
block, e.g.
[imageView setImageWithURL:[NSURL URLWithString:@"http://i.imgur.com/r4uwx.jpg"]
placeholderImage:[UIImage imageNamed:@"placeholder-avatar"]
success:^(NSURLRequest *request, NSHTTPURLResponse *response, UIImage *image) {
self.imageView.alpha = 0.0;
self.imageView.image = image;
[UIView animateWithDuration:0.25
animations:^{
self.imageView.alpha = 1.0;
}];
}
failure:NULL];
或者,如果您的占位符图像不是空白,则可能要通过transitionWithView
交叉溶解:
Or, if you placeholder image isn't blank, you would probably want to cross dissolve via transitionWithView
:
[imageView setImageWithURL:[NSURL URLWithString:@"http://i.imgur.com/r4uwx.jpg"]
placeholderImage:[UIImage imageNamed:@"placeholder-avatar"]
success:^(NSURLRequest *request, NSHTTPURLResponse *response, UIImage *image) {
[UIView transitionWithView:self.imageView
duration:0.3
options:UIViewAnimationOptionTransitionCrossDissolve
animations:^{
self.imageView.image = image;
}
completion:NULL];
}
failure:NULL];
更新:
Update:
顺便说一句,如果您担心在下载完成之前会保留图像视图(如果您引用self
,则视图或视图控制器也是如此),您可以:
By the way, if you're concerned about the fact that the image view (and if you refer to self
, the view or the view controller, too) being retained until the download is done, you could:
__weak UIImageView *weakImageView = self.imageView;
[imageView setImageWithURL:[NSURL URLWithString:@"http://i.imgur.com/r4uwx.jpg"]
placeholderImage:[UIImage imageNamed:@"placeholder-avatar"]
success:^(NSURLRequest *request, NSHTTPURLResponse *response, UIImage *image) {
UIImageView *strongImageView = weakImageView; // make local strong reference to protect against race conditions
if (!strongImageView) return;
[UIView transitionWithView:strongImageView
duration:0.3
options:UIViewAnimationOptionTransitionCrossDissolve
animations:^{
strongImageView.image = image;
}
completion:NULL];
}
failure:NULL];
即使这样做,图像视图也会保留到下载完成为止,因此,您还可以选择通过视图控制器的dealloc
方法取消正在进行的所有下载:
Even if you do that, the image view is retained until the download completes, so you could optionally also cancel any download in progress in the dealloc
method of the view controller:
- (void)dealloc
{
// if MRC, call [super dealloc], too
[_imageView cancelImageRequestOperation];
}
这篇关于带有动画的UIImageView + AFNetworking setImageWithURL的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!