使用停止选择器重复动画

时间:2010-05-26 04:38:59

标签: iphone animation core-graphics

我正在尝试重复动画,直到满足某个条件。像这样:

- (void) animateUpdate {
    if (inUpdate) {
        [UIView beginAnimations:nil context:NULL];
        [UIView setAnimationDuration:2.0];
        [UIView setAnimationDelegate: self];
        [UIView setAnimationDidStopSelector: @selector(animateUpdate)];
        button.transform = CGAffineTransformMakeRotation( M_PI );
        [UIView commitAnimations];
    }
}

这将是第一次运行,但不会重复。只有在应用程序崩溃之前,才会调用选择器。

我该怎么做?

感谢。

2 个答案:

答案 0 :(得分:0)

Core Animation以异步方式工作,也就是说,您的代码不会阻塞线程,动画实际上会在下一次运行循环时启动。要重复动画,您应该在动画停止选择器中重新启动动画,或者根据需要明确使用CAAnimation的 repeatCount 。否则,Core Animation会将您的所有动画合并为一个。

答案 1 :(得分:0)

同样的问题。这是一些做同样事情的代码

- (void)beginRotation{
  [UIView beginAnimations:@"ghostRotate" context:NULL];
  [UIView setAnimationBeginsFromCurrentState:YES];
    [UIView setAnimationDuration:5.0];
    [UIView setAnimationDelegate:self];
    [UIView setAnimationDidStopSelector:@selector(animationDidStop:finished:context:)];
    ghostImage.transform = CGAffineTransformMakeRotation(M_PI*0.5);
    [UIView commitAnimations];
}

- (void)animationDidStop:(NSString *)animationID finished:(NSNumber *)finished context:(void *)context{
    if ([finished boolValue]){
    [self beginRotation];
    }
}

当第一个动画完成时,它会调用didStop ...这会再次调用beginAnimation方法,该方法会立即再次返回到didStop。 finished设置为1并进入堆栈溢出状态......

想法?