2011-03-15 70 views
2

我注意到了iPhone Mail.app和SMS.app應用程序中的這個功能,但我不確定如何自己實現它。Animate UITableViewCell ContentView在進入編輯模式時淡入淡出

在標準的UITableView中,當用戶點擊'編輯'按鈕並且刪除按鈕移動到位時,隨着內容視圖向右滑動,它們執行快速淡入淡出轉換, (考慮到刪除按鈕佔用的空間)。

我最初以爲這是通過調用以下方法時將啓用編輯模式下完成:

[self.tableView reloadRowsAtIndexPaths: [tableView indexPathsForVisibleRows] withRowAnimation: UITableViewRowAnimationFade]; 

然而,這不可能是正確的,因爲它也淡出過渡的刪除按鈕本身以及任何附件查看該小區(足以說,它看起來很奇怪)。

我想知道,如何將有可能迫使內容視圖重繪自身,並隨後淡出淡入當表進入編輯模式,舊的新版本繪製的?

UPDATE: 由於迦勒的答案,這是的,讓我明白我是後代碼的最後一塊:

我最終的解決辦法是子類的UITableViewCell,然後將下面的代碼適用於setEditing訪問:

-(void) setEditing: (BOOL)editing animated: (BOOL)animated 
{ 
    [super setEditing: editing animated: animated]; 

    CATransition *animation = [CATransition animation]; 
    animation.duration = 0.2f; 
    animation.type = kCATransitionFade; 

    //redraw the subviews (and animate) 
    for(UIView *subview in self.contentView.subviews) 
    { 
     [subview.layer addAnimation: animation forKey: @"editingFade"]; 
     [subview setNeedsDisplay]; 
    } 
} 

我可能應該澄清一下。由於性能至關重要,我的單元格contentView中的所有內容都通過CG(即drawRect :)呈現,因此我無法控制在此處繪製的任何元素。

回答

5

當您在桌面上調用-setEditing:animated:時發生該動畫。該表然後在每個可見單元上調用-setEditing:animated:。它看起來像表格單元格的標準行爲是調整內容視圖的大小,正確地移動它們,並刪除正確的附件。如果您擁有自己的單元格並希望在編輯模式下擁有不同的外觀,我認爲您可以覆蓋-setEditing:animated:以隨意調整單元格內容。

+1

啊,這個伎倆!謝謝!!! – TiM

+0

太棒了 - 感謝您的關注! – Caleb

+0

我不確定這是否涵蓋它。當已經處於編輯模式的行顯示其刪除按鈕(狀態== 3)時,所提及的應用程序使用相同的轉換。 setEditing:animated:在發生這種情況時不會被調用。 –