2011-11-24 48 views
0

我已经是动画图像的顺序如下:IOS核心动画,当我的动画序列结束时如何调用animationDidStop:方法?

IBOutlet UIImageView *block; 
NSArray *image_arr = [NSArray arrayWithObjects:[UIImage imageNamed:@"img1"],[UIImage imagedNamed:@"img2"],nil]; 
block.animationImages = image_arr; 
block.animationDuration =1; 
block.animationRepeatcount =5; 
[block startAnimating]; 

而且方法animationDidStop:

-(void)animationDidStop:(NSString*)animationID finished:(BOOL)didFinish context:(void*)context{ 
NSLog(animationID); 
} 

什么我需要做的,有一个名为在动画的最后方法animationDidStop ?

回答

0

我需要做什么才能使动画结束时调用animationDidStop方法?

你不能让它调用,因为这不是核心动画。你有思想混为一谈两个不同的东西:

  • 具有一个UIImageView做的非常头脑简单的卡通风格的动画显示的一连串图像的能力;

  • 核心动画,其中可以有一个完成块或完成处理程序。

我建议你做的是既可以使用真正核心动画,你实际上可以通过延迟性能回调到自己设置的动画和完成块或处理,否则只是假的当这个伪动画结束时,从现在起5秒钟的代码。

+0

下面是我书中描述所需区别的章节,并依次描述每个动画技术:http://www.apeth.com/iOSBook/ch17.html – matt

0

了最新的iOS版本4.2及更高版本,你应该使用模块用于动画

下面将推动你在正确的方向,尝试改变UIViewAnimationOption到不同的东西:

[UIView animateWithDuration:1.0f delay:0.0f options:UIViewAnimationOptionRepeat animations:^{ 
       //Animation here 
      }completion:^(BOOL finished) { 
       if(finished){ 
        //Your Code here 
       } 
      } 
1

的UIImageView的“ animationImages“属性与coreanimation无关,它只是触发内部NSTimer切换图像。

-(void)animationDidStop:finished:context: 

选择器被称为核心动画的一部分。

我会在你的情况下,尝试什么是这样的:

IBOutlet UIImageView *block; 
NSArray *image_arr = [NSArray arrayWithObjects:[UIImage imageNamed:@"img1"],[UIImage imagedNamed:@"img2"],nil]; 
block.animationImages = image_arr; 
block.animationDuration = animationDuration; 
block.animationRepeatcount = animationRepeatCount; 
[block startAnimating]; 
[self performSelector:@selector(animationFinished:) withObject:@"someAnimationId" afterDelay: animationDuration * animationRepeatCount]; 

请记住,这种方法可能会导致一定的滞后性 - 如果动画帧的图像显示,第一次作为一个组成部分在动画开始播放的第一次之前,会延迟加载,并且可能会影响performSelector调用的精度。

如果事实证明这是一个问题check out this answer's forceLoad method,如果这不起作用在隐藏的UIImageView上调用startAnimation,它对我来说只是一次。