我从一个网址中提取一个图像并在一个imageview中显示它。我想要的是一个fadein动画效果当图像从url.i m加载时使用下面的背景线程是代码..
NSOperationQueue *theQueue=[[[NSOperationQueue alloc]init]autorelease];
NSInvocationOperation *theOp=[[NSInvocationOperation alloc]initWithTarget:self selector:@selector(loadImage) object:nil];
[theQueue addOperation:theOp];
}
-(void)loadImage
{
NSAutoreleasePool *pool=[[NSAutoreleasePool alloc]init];
[activityIndicator startAnimating];
NSString *imagefile = [image objectAtIndex:0];
NSURL *url1=[NSURL URLWithString:imagefile];
NSData *data = [NSData dataWithContentsOfURL:url1];
UIImage *ui=[[UIImage alloc]initWithData:data];
NSLog(@"awesome:%@",ui);
[ui beginAnimations:@"" context:nil];
bigbanner.image=ui;
[activityIndicator stopAnimating];
[pool release];
}
答案 0 :(得分:1)
如果使用NSBlockOperation,则无需自动释放池。
NSOperationQueue *queue = [[NSOperationQueue alloc] init];
NSBlockOperation *operation = [NSBlockOperation blockOperationWithBlock:^{
NSData *data = [NSData dataWithContentsOfURL:[NSURL URLWithString:@"http://www.google.com/intl/en_com/images/srpr/logo3w.png"]];
UIImage *image = [[UIImage alloc]initWithData:data];
self.bigbanner = [[UIImageView alloc] initWithImage:image];
self.bigbanner.alpha=0.;
}];
[operation setCompletionBlock:^{
[UIView animateWithDuration:.5
animations:^{ bigbanner.alpha = 1.0; }
completion:^(BOOL finished){ }];
}];
[queue addOperation:operation];
也许它应该在主线程上调度_async来更新图像,但无论如何都可以工作。除非您之前已经将笔尖上的UIImageView连接到班级上的ivar(ShiShi的答案解释如何),否则这将无法执行任何操作。
答案 1 :(得分:1)
是的,你说的是绝对正确的,这就是做到这一点的方法。我写了这个方法&总是用它来淡化我的形象。我为此与CALayer打交道。您需要为此导入Quartz框架。
#import <QuartzCore/QuartzCore.h>
...
- (void)fadeInLayer:(CALayer *)l
{
CABasicAnimation *fadeInAnimate = [CABasicAnimation animationWithKeyPath:@"opacity"];
fadeInAnimate.duration = 0.5;
fadeInAnimate.repeatCount = 1;
fadeInAnimate.autoreverses = NO;
fadeInAnimate.fromValue = [NSNumber numberWithFloat:0.0];
fadeInAnimate.toValue = [NSNumber numberWithFloat:1.0];
fadeInAnimate.removedOnCompletion = YES;
[l addAnimation:fadeInAnimate forKey:@"animateOpacity"];
return;
}
用法:如果您从当前文件中使用它,那么 -
[self fadeInLayer:imageView.layer];
希望这有帮助
答案 2 :(得分:1)
编辑我的答案,因为我需要一些截图:
打开你的界面构建器,想要我甚至做一个空图像(它将是你将要在网上更新的图像的占位符)
稍后就这样做
//在加载视图后实现viewDidLoad以进行其他设置,通常是从笔尖。
- (void)viewDidLoad
{
[super viewDidLoad];
[UIView beginAnimations:nil context:nil];
[UIView setAnimationDuration:3.75];
[UIView setAnimationDelegate:self];
theImage.alpha = 0.0;
[UIView commitAnimations];
}
这很简单。