您需要能夠訪問您正在運行的動畫的特定實例,以協調每個動畫的完成操作。在你的例子中,[self doAnimation]不會讓我們看到任何動畫,所以你的問題不能用你提供的東西「解決」。
有幾種方法可以實現您想要的效果,但這取決於您正在處理的動畫類型。
在其他的答案所指出的,在視圖上的動畫之後執行代碼的最常見的方式是通過一個completionBlock中:animateWithDuration:completion:
另一種方式來處理屬性變化的動畫是的範圍內設置一個CATransaction
完成塊交易。
但是,這些特定的方法基本上是爲動畫屬性或層次結構更改視圖。當您的動畫涉及視圖及其屬性時,這是推薦的方式,但不包括您可能在iOS中找到的所有類型的動畫。從你的問題來看,目前還不清楚你使用的是什麼類型的動畫(或者如何,或者爲什麼),但是如果你實際觸及CAAnimations(關鍵幀動畫或一組動畫)的實例,你會通常做的是建立一個委託:
CAAnimation *animation = [CAAnimation animation];
[animation setDelegate:self];
[animatedLayer addAnimation:animation forKeyPath:nil];
// Then implement the delegate method on your class
- (void)animationDidStop:(CAAnimation *)theAnimation finished:(BOOL)flag
{
// Do post-animation work here.
}
的一點是,你如何完成處理實現取決於你的動畫是如何實現的。在這種情況下,我們看不到後者,所以我們無法確定前者。
您的問題無法從您提供的內容中解決。請參閱下面的答案,以獲得您想要的行爲,您必須能夠看到執行動畫的代碼(此處由doAnimation封裝)。 – isaac 2013-05-03 22:54:23