动作后的UIImageView动画?

时间:2011-07-22 18:27:06

标签: iphone animation uiimageview

我在设置动画时遇到问题。第一个imageview开始动画,当playound1被调用时,然后开始第二个动画。一切正常,但现在当第二个动画停止时,没有动画正在进行。所以我想做的是在第二个动画停止后 - 第一个全部开始 - 然后再次调用方法来播放第二个动画。任何提示?

在这里,您可以看到现在的部分代码:

- (void)loadtest1 {
    NSArray *imageArray = [[NSArray alloc] initWithObjects:
                           [UIImage imageNamed:@"test1.png"],
                           [UIImage imageNamed:@"test2.png"],
                           [UIImage imageNamed:@"test3.png"],
                           [UIImage imageNamed:@"test4.png"],
                           nil];

    test1.animationImages = imageArray;
    test1.animationRepeatCount = 0;
    test1.animationDuration = 1;

    [imageArray release];
    [test1 startAnimating];
}

- (void)loadtest2 {
    NSArray *imageArray = [[NSArray alloc] initWithObjects:
                           [UIImage imageNamed:@"test4.png"],
                           [UIImage imageNamed:@"test5.png"],
                           [UIImage imageNamed:@"test6.png"],
                           [UIImage imageNamed:@"test7.png"],
                           nil];

    test2.animationImages = imageArray;
    test2.animationRepeatCount = -1;
    test2.animationDuration = 1;

    [imageArray release];
    [test2 startAnimating];
}

- (IBAction)playsound1 {
    NSString *path = [[NSBundle mainBundle] pathForResource:@"test" ofType:@"mp3"];
    AVAudioPlayer* theAudio = [[AVAudioPlayer alloc] initWithContentsOfURL:[NSURL fileURLWithPath:path] error:NULL];
    theAudio.delegate = self;
    [theAudio play];
    test1.hidden = 0;
    test2.hidden = 1;
    [test1 startAnimating];
    test2.center = test1.center;
}

1 个答案:

答案 0 :(得分:2)

如果我理解正确的话,你要做的就是在第二个动画完成时重新开始你的第一个动画

处理此问题的正确方法是通过CABasicAnimation,它允许您指定在动画完成时调用– animationDidStop:finished:方法的委托。

如果你不想这样,有一种解决方法如下:在loadtest2中,在你开始动画之后,安排一个延迟执行的方法:

[self performSelector:@selector(loadTest1) withObject:nil afterDelay:1.0];

这将(或多或少)令人满意地工作,因为您知道动画将持续多长时间。因此,当动画结束时,执行loadTest1并再次开始第一个动画。