动画完成后调用带参数的方法

时间:2010-03-08 00:52:50

标签: iphone cocoa cocoa-touch

我想在完成动画后调用具有某些参数的方法。

流程是这样的:

-(void) myMethod:(int)val
{
    [self performAnimation];
    [self doSomethingElse:val]; // This should be done after animation completion
}

我认为'doSomethingElse'方法需要从'setAnimationDidStopSelector'中定义的方法调用 - 或者有没有办法让动画块完成?

让调用'setAnimationDidStopSelector'的方法知道它需要调用的方法及其参数的最佳方法是什么?这可以用选择器完成吗?或者是通过将方法及其参数存储在类临时变量中并在需要时访问它们来实现此目的的唯一方法吗?

3 个答案:

答案 0 :(得分:3)

performAnimation不会阻塞线程,因此知道动画是否完成的唯一方法是设置选择器,如下所示:

-(void) myMethod:(int)val {
    [self setAnimationDelegate:self];
    [self setAnimationDidStopSelector:@selector(animationDidStop:finished:context:)];
    [self performAnimation];
}

- (void)animationDidStop:(NSString *)animationID finished:(NSNumber *)finished context:(void *)context {
}

答案 1 :(得分:1)

通过setAnimationDidStopSelector调用的方法具有以下签名:

- (void)animationDidStop:(NSString *)animationID finished:(NSNumber *)finished context:(void *)context

context参数包含您传递给beginAnimations:context:的所有内容,因此您可以使用它将val传递给animationDidStop:finished:context:。如果您需要调用的实际方法也是变量,则应创建NSInvocation并将其作为上下文传递。

答案 2 :(得分:0)

在动画完成之前无法阻止动画(除非你只是阻止动画持续时间的主线程。你可以将两个参数传递给didStopSelector方法:动画名称和上下文.Name必须是一个字符串,但语境可以是任何东西。