兩個動畫都在同一個運行週期運行(這是UIView的動畫是如何工作的,所有的動畫在一個運行週期是「串聯」。
你需要使用
[UIView setAnimationDelay:3.0];
在第二動畫。
示例代碼
有兩種方法可以做到這-使用標準的開始/提交動畫,或使用塊方法。該實施例使用是開始/提交動畫代碼,這就是你所擁有的。這個問題是因爲動畫是連接在一起的,沒有進入CA,標準的動畫行爲是爲了「強制」在另一個運行之前結束。它與運行循環有關;
建築動畫驅動接口從
WWDC 2010深入瞭解這一點。但代碼做你想要的是這樣的:
- (void)fadeOut {
[UIView beginAnimations:@"Animation2" context:NULL];
[UIView setAnimationDuration:3];
[self.testView setAlpha:0.00];
[UIView commitAnimations];
}
- (IBAction)animate {
[UIView beginAnimations:@"Animation1" context:NULL];
[UIView setAnimationDuration:3];
[self.testView setAlpha:1.00];
[UIView commitAnimations];
[self performSelector:@selector(fadeOut) withObject:nil afterDelay:3.0];
}
你必須強制它分解運行循環,基本上。關鍵要記住的是,動畫不會按順序執行,正如您可能希望的代碼一樣。
基於塊的代碼如下所示。請注意,我正在使用autorepeat選項,該選項會自動重複播放動畫。請注意,在動畫中,您正在設置一個屬性,因此默認情況下在動畫完成後,視圖將回到可見狀態。因此,您將完成塊中的屬性重新設置爲零。
- (IBAction)animate {
[UIView transitionWithView:self.testView duration:3.0 options:UIViewAnimationOptionAutoreverse animations:^{self.testView.alpha = 1.0;} completion:^(BOOL finished) {self.testView.alpha = 0.0;}];
}
希望這有助於!
好的,但我希望從0.00到1.00的阿爾法是在3秒內,而不是立即。你能舉個例子嗎? – CrazyDev
是的,完整的工作和測試示例張貼。 – FeifanZ