2012-01-27 72 views
3

在下面的代碼示出了包含用於所述用戶的狀態信息的標籤的動畫。如果發生事件,標籤顯示提示,並通過uiview動畫塊緩慢消失。取消一個UIView的動畫塊

- (void)showStatusOnLabelWithString:(NSString *)statusMessage 
{ 
    // [self.view.layer removeAllAnimations]; // not working 
    [labelStatus.layer removeAllAnimations]; // not working, too 

    [labelStatus setText:statusMessage]; 
    [labelStatus setHidden:NO]; 
    [labelStatus setAlpha:1.0]; 

    [UIView animateWithDuration:5.0 animations:^ 
    { 
     [labelStatus setAlpha:0.0]; 

    } completion:^(BOOL finished) 
    { 
     [labelStatus setHidden:YES]; 
     [labelStatus setAlpha:1.0]; 
    }]; 
} 

如果在以下5秒後的第一個標籤應再次動畫另一個事件,所以我刪除了以前的動畫與[self.view.layer removeAllAnimations](這就是我的想法)。 但標籤只是完全消失,下一個5秒的標籤是不可見的一次。

如果我(或用戶)的等待(S)的5S一切工作正常。

爲什麼不能正常工作?

親切的問候, $ H @ RKY

回答

6

更改此:

completion:^(BOOL finished) 
{ 
    [labelStatus setHidden:YES]; 
    [labelStatus setAlpha:1.0]; 
}]; 

這樣:

completion:^(BOOL finished) 
{ 
    if (finished) { 
     [labelStatus setHidden:YES]; 
     [labelStatus setAlpha:1.0]; 
    } 
}]; 

的原因是您當您刪除動畫的層達到該完成塊,但finishedfalse因爲你打斷它。另外,這裏的順序很重要。也許你期待removeAllAnimations立即調完成塊,而是你的showStatusOnLabelWithString:方法完成後,它會被調用,因此正在發生的事情是,你在呼喚setHidden:NO緊跟setHidden:YES

+0

偉大的工程。瞭解了有關完成變量^^的新內容 – Sharky 2012-01-27 10:45:25

0

你嘗試從標籤的層(labelStatus.layer)去除動畫?

+0

是的,我沒有,但同樣的結果-.-我更新了我的問題,增加你的答案。 – Sharky 2012-01-27 09:40:11