ios动画一个接一个

时间:2012-02-06 10:36:49

标签: ios animation

我有一些观点,我想逐一展示它们。我无法找到如何做到这一点。相反,如果我使用以下代码,则所有视图立即出现。

NSTimer *timer1 = [NSTimer scheduledTimerWithTimeInterval:2 target:self selector:@selector(showStar2) userInfo:nil repeats:NO];
        NSTimer *timer2 = [NSTimer scheduledTimerWithTimeInterval:2 target:self selector:@selector(showStar3) userInfo:nil repeats:NO];
        NSTimer *timer3 = [NSTimer scheduledTimerWithTimeInterval:2 target:self selector:@selector(showStar4) userInfo:nil repeats:NO];
        NSTimer *timer4 = [NSTimer scheduledTimerWithTimeInterval:2 target:self selector:@selector(showStar5) userInfo:nil repeats:NO];

        [timer1 fire];
        [timer2 fire];
        [timer3 fire];
        [timer4 fire];


-(void)showStar2
{

    [UIView beginAnimations:@"anim1" context:NULL];
    [UIView setAnimationDuration:0.5];
    [stars[1] setAlpha:1];
    [UIView commitAnimations];
}

除了行

之外,所有showStar函数都是相同的
[UIView beginAnimations:@"anim1" context:NULL];
[stars[1] setAlpha:1];

有不同的论点。 stars是一个UIImageView的数组。 欢迎提出任何建议。

4 个答案:

答案 0 :(得分:1)

实际上你在2秒之后正好射击了所有的计时器。更改不同计时器的timeInterval。

相反,您可以使用会反复触发的单个NSTimer

在.h文件中声明NSUInteger count;

按如下方式启动NSTimer:

[NSTimer scheduledTimerWithTimeInterval:2 target:self selector:@selector(showStar:) userInfo:nil repeats:YES];

您的showStar方法应如下所示:

-(void)showStar:(NSTimer*)timer
{
    if( count > 0 )
    {
        [stars[count-1] setAlpha:0];
    }
    [UIView beginAnimations:@"anim1" context:NULL];
    [UIView setAnimationDuration:0.5];
    [stars[count] setAlpha:1];
    [UIView commitAnimations];

    count++;

    if( count == 4 )
    {
        [timer invalidate];
        count = 0;
    }
}

添加了以下代码。

if( count > 0 )
{
    [stars[count-1] setAlpha:0];
}

答案 1 :(得分:1)

所有的计时器都使用相同的时间延迟,这就是所有计时器一次出现的情况。另外,不要在计时器上点火,它们会自动点火。召唤火可能会让他们马上开火。

顺便提一下,您不需要使用计时器来触发动画,只需将其添加到动画中即可:

[UIView setAnimationDelay:x];

为每个视图使用不同的x。

答案 2 :(得分:0)

我会做这样的事情

- (void)firstAnimation{

    [UIView animateWithDuration:2.0f animations:^{
        //first animation
    } completion:^(BOOL finished){
        [self secondAnimation];
    }];

}

可能是递归,而当前动画的标志会更清晰,但

答案 3 :(得分:0)

在我看来,你的实施是错误的。

最好在UImageView上放置UIView。 接下来创建一个NSArray图片,然后加载到imageView

arrAnimations = [[NSArray alloc] initWithObjects:[UIImage imageNamed:@"image1.png],.....nil];

然后致电

imageView.animationImages= arrAnimations;
imageView.animationDuration=2;
[imageView startAnimating];