2011-03-15 131 views
0

我在按鈕上使用動畫首次顯示視圖,第二次隱藏視圖。 這裏是我的隱藏視圖簡單動畫問題

-(IBAction)clickme 
{ 
[UIView beginAnimations:nil context:NULL]; 
    [UIView setAnimationDuration:0.3]; 

    [UIView setAnimationCurve:UIViewAnimationCurveLinear]; 
    [UIView setAnimationDelegate:self]; 


    [view1 setAlpha:0.0]; 
[UIView commitAnimations]; 
} 

類似的代碼是有顯示的視圖代碼。

但是,當用戶多次單擊按鈕時會出現問題....意味着我使用了2秒的動畫,但如果用戶在動畫過程中按下相同的按鈕,則輸出結果非常糟糕。

我不想在動畫期間禁用該按鈕。

有沒有其他辦法?

回答

2

您需要跟蹤是否有動畫正在進行,如果是,請忽略點擊。

在類標題中聲明實例變量BOOL animating;,並在init中將其初始化爲NO

然後,

-(IBAction)clickme 
{ 
    if (animating) return; 
    animating = YES; 

[UIView beginAnimations:nil context:self]; 
    [UIView setAnimationDuration:0.3]; 

    [UIView setAnimationCurve:UIViewAnimationCurveLinear]; 
    [UIView setAnimationDelegate:self]; 

    [view1 setAlpha:0.0]; 
[UIView commitAnimations]; 
} 

- (void)animationDidStop:(NSString *)animationID finished:(NSNumber *)finished context:(void *)context { 
    if (context == self) 
     animating = NO; 
} 
+1

你錯過[UIView的setAnimationDidStopSelector:...] ;. ;) – hennes 2011-03-15 13:07:45

+0

@hennes不,我不這麼認爲,'[UIView setAnimationDelegate:self];'表示這些消息是在沒有明確設置選擇器的情況下發送的。 – joerick 2011-03-15 17:32:18

+0

你確定嗎?我一直認爲我需要手動設置這些。那麼請原諒我的缺乏經驗。 – hennes 2011-03-15 18:25:03

2

嘗試使用+(無效)setAnimationBeginsFromCurrentState:(BOOL)fromCurrentState:

-(IBAction)clickme 
{ 
[UIView beginAnimations:nil context:NULL]; 
    [UIView setAnimationDuration:0.3]; 
    [UIView setAnimationBeginsFromCurrentState:YES]; 

    [UIView setAnimationCurve:UIViewAnimationCurveLinear]; 
    [UIView setAnimationDelegate:self]; 


    [view1 setAlpha:0.0]; 
[UIView commitAnimations]; 
}