2011-08-09 22 views
0

我有這樣的代碼:IOS:UIViewImage setAlpha問題

當圖像變化的α從0.00到1.00這是imediately而不是在3秒,爲什麼呢?

- (void) startAnimation{ 

[UIView beginAnimations:nil context:NULL]; 
[UIView setAnimationDuration:3]; 
[successView setAlpha:1.00]; 
[UIView commitAnimations]; 


[UIView beginAnimations:nil context:NULL]; 
[UIView setAnimationDuration:3]; 
[successView setAlpha:0.00]; 
[UIView commitAnimations];} 

回答

3

兩個動畫都在同一個運行週期運行(這是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

好的,但我希望從0.00到1.00的阿爾法是在3秒內,而不是立即。你能舉個例子嗎? – CrazyDev

+0

是的,完整的工作和測試示例張貼。 – FeifanZ