IOS Core动画,当动画序列结束时如何调用animationDidStop:方法?

时间:2011-11-24 03:23:56

标签: ios iphone core-animation

我有以下动画图像序列:

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方法需要做什么?

3 个答案:

答案 0 :(得分: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,它为我做了一次。

答案 1 :(得分:0)

  

在动画结束时调用animationDidStop方法需要做什么?

你无法调用它,因为这不是核心动画。你在心理上混淆了两件不同的事情:

  • 通过让UIImageView显示连续的图像,能够做非常简单的卡通风格动画;

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

我建议你做的是使用真实的核心动画,你可以实际设置动画和完成块或处理程序,或者只是通过使用延迟性能来回调你的这个伪动画结束后5秒钟自己的代码。

答案 2 :(得分: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
                }
            }