使用 AFNetworking,从服务器下载图像并放入 UIImageView 非常简单:
[imageView setImageWithURL:[NSURL URLWithString:@"http://i.imgur.com/r4uwx.jpg"] placeholderImage:[UIImage imageNamed:@"placeholder-avatar"]];
如果我想用效果(可能是褪色)替换图像怎么样?
这是因为我想用很多图像制作幻灯片。
使用 AFNetworking,从服务器下载图像并放入 UIImageView 非常简单:
[imageView setImageWithURL:[NSURL URLWithString:@"http://i.imgur.com/r4uwx.jpg"] placeholderImage:[UIImage imageNamed:@"placeholder-avatar"]];
如果我想用效果(可能是褪色)替换图像怎么样?
这是因为我想用很多图像制作幻灯片。
您可以与提供块animateWithDuration
的再现一起使用,例如setImageWithURL
success
[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
:
[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];
更新:
顺便说一句,如果您担心图像视图(如果您指self
的是 视图或视图控制器)在下载完成之前会一直保留,您可以:
__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
视图控制器方法中正在进行的任何下载:
- (void)dealloc
{
// if MRC, call [super dealloc], too
[_imageView cancelImageRequestOperation];
}
当在线请求成功完成时,尝试将 imageView 的 alpha 从 0 设置为 1:
// You should not call an ivar from a block (so get a weak reference to the imageView)
__weak UIImageView *weakImageView = self.imageView;
// The AFNetworking method to call
[imageView setImageWithURLRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"http://host.com/image1.png"]] placeholderImage:nil]
success:^(NSURLRequest *request, NSHTTPURLResponse *response, UIImage *image){
// Here you can animate the alpha of the imageview from 0.0 to 1.0 in 0.3 seconds
[weakImageView setAlpha:0.0];
[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDuration:0.3];
[weakImageView setAlpha:1.0];
[UIView commitAnimations];
}
failure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error){
// Your failure handle code
}
当然,您可以在完成块中使用您喜欢的任何其他动画!