如何在imageView上制作fadein动画效果

时间:2011-10-04 11:32:23

标签: objective-c xcode

我从一个网址中提取一个图像并在一个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];
}

3 个答案:

答案 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)

编辑我的答案,因为我需要一些截图:

打开你的界面构建器,想要我甚至做一个空图像(它将是你将要在网上更新的图像的占位符)

enter image description here

enter image description here

稍后就这样做

//在加载视图后实现viewDidLoad以进行其他设置,通常是从笔尖。

- (void)viewDidLoad
{
    [super viewDidLoad];

    [UIView beginAnimations:nil context:nil];
    [UIView setAnimationDuration:3.75];
    [UIView setAnimationDelegate:self];
    theImage.alpha = 0.0;

    [UIView commitAnimations];


}

这很简单。