从我对你正在做什么的理解中,听起来你实际上一次运行所有5个动画。在for循环中执行动画块时,runloop不会在每个循环之间进行迭代,只会运行最后一个动画。
你需要使用的是使用完成调用并将它们“链接”在一起。所以你运行第一个动画,然后在那个完成时调用你运行第二个,然后在那个调用第三个,等等更长的代码,但这将工作。
在这种情况下会更容易使用块,那么所有的动画代码将在一个地方,而不是必须传播到每个动画的一堆方法。你可以在第一个动画的完成块中嵌套块,第一个动画的完成块会产生第二块,然后是第三块等。
下面是使用块方法的示例。这有点难以阅读,但你会明白。您可能可以创建一个动画块并在每个完成方法中重复使用它,但是我不知道所有这些做法的优缺点,而且当您第一次尝试理解时,这会更容易阅读。
请注意,我没有真正尝试过或测试过它,但我认为它会做你想做的。
[UIView animateWithDuration:1.0 animations:^(void) {
// Animation changes go here
// blah.alpha = 1.0
// blah.position = CGPointMake
// etc
} completion:^(BOOL finished) {
// Start next animation which will run with this one finishes
[UIView animateWithDuration:1.0 animations:^(void) {
// Animation changes go here
// blah.alpha = 1.0
// blah.position = CGPointMake
// etc
} completion:^(BOOL finished) {
// Start next animation which will run with this one finishes
[UIView animateWithDuration:1.0 animations:^(void) {
// Animation changes go here
// blah.alpha = 1.0
// blah.position = CGPointMake
// etc
} completion:^(BOOL finished) {
// Start next animation which will run with this one finishes
[UIView animateWithDuration:1.0 animations:^(void) {
// Animation changes go here
// blah.alpha = 1.0
// blah.position = CGPointMake
// etc
} completion:nil];
}];
}];
}];
请注意,使用块来设置动画需要4.0的最低OS目标,所以如果你试图定位任何3.X设备,那么你不能使用它。 – 2011-05-31 22:30:12
这听起来像是我的问题的正确评估。你有没有“块?”的例子 – Crystal 2011-05-31 22:32:21
以示例更新我的答案。试试看看它是否适合你。 – 2011-06-01 21:05:02