2011-11-22 40 views
0

我希望UITableViewCell(背景)很快亮起紅色並再次返回到舊的外觀。這是在NSTimer的生命期間完成的,它給予持續的衝動來調用動畫。如何最好地動畫UITableViewCell或UIButton以紅色亮起

現在我正在使用UIView的animateWithDuration:delay:options:animations:completion:方法首先將單元格背景顏色更改爲紅色,然後在完成部分再次將其變爲灰色(單元格的背景爲灰色)。但由於某種原因,此解決方案無法順利運行。

問題:核心動畫思考,我將如何做最好這種動畫爲(A)的UITableVeiwCell和(b)的UIButton

感謝您的幫助!

回答

0

我在使用NSTimer一遍又一遍地觸發動畫。不知何故,它給了上述副作用。現在我正在使用自iOS4以來更爲流暢的塊動畫。你必須在(UIViewAnimationOptionRepeat | UIViewAnimationOptionAutoreverse)選項合併重複動畫:

[UIView animateWithDuration:kDurationOfCellAnimation delay:0 options:UIViewAnimationOptionRepeat | UIViewAnimationOptionAutoreverse 
       animations:^{ 
        //this will be animated in and out 
        cell.backgroundColor = CELL_RECORDING_COLOR; 

       } 
       completion:^(BOOL finished){ 

        cell.backgroundColor = TABLEVIEW_BACKGROUND_COLOR; 

       }]; 

唯一的副作用,我經歷是,當細胞熄滅屏幕,這是不符合NSTimer的情況下,動畫停止。

1

animateWithDuration是一個用於核心動畫的UIView包裝器,但您可以嘗試將它做得稍低一點,看看是否有變化。 爲了做一個CALayer的一個明確的CA交易做這樣的事情:

[CATransaction begin]; 
[CATransaction setAnimationDuration:0.5]; 
[CATransaction setAnimationTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseOut]]; 
[CATransaction setCompletionBlock:^{ //Your completion block }]; 

view.layer.backgroundColor = [UIColor whiteColor].CGColor; 

[CATransaction commit]; 

其中的觀點是有問題的控制。對於只是按鈕本身的UIButton,對於UITableViewCell而言,取決於表是否被分組,或者如果您使用的是定製的UITableViewCell。分組表格單元格添加了backgroundview屬性。

+0

我正在使用自定義的UITableViewCell。我用更多細節和代碼更新了我的問題。你可能會看到有什麼問題嗎? –

+1

似乎已經失去了在第一次移動之後對圖層進行動畫處理的能力。確保你在主線程上,因爲這是一個UI操作。我看到的另一個問題是圖層視圖單元格的層委託可能已經更改。如果是這樣的話,你可以嘗試添加一個新圖層並僅僅進行動畫處理,因爲有時CA會對頂層圖層的代表有問題。您可以使用[CALayer圖層]創建一個新圖層,並將其添加到您的圖層,就像您將子視圖添加到視圖一樣。用相同的邊界創建它,然後運行你的動畫。否則我的想法...... – Ben

+0

它並沒有改變奇怪的行爲。非常感謝你的幫助。 –