一千萬個為什麽

搜索

動畫UITableViewCell ContentView在進入編輯模式時淡出

我在iPhone Mail.app和SMS.app應用程序中註意到了這個功能,但我不確定如何自己實現它。

在標準的UITableView中,當用戶點擊“編輯”按鈕並且刪除按鈕移動到位時,當內容視圖向右滑動時,它們會執行快速淡入淡出過渡,其中它們被更薄的自身版本替換(對於帳戶)刪除按鈕占用的空間)。

我最初認為這是通過在啟用編輯模式時調用以下方法來完成的:

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

然而,這可能是正確的,因為它也淡化了刪除按鈕本身的轉換以及單元格所具有的任何附件視圖(足以說明,它看起來很奇怪)。

我想知道,當表格進入編輯模式時,如何強制內容視圖重繪自身,然後將新繪制的版本淡化舊版本?

更新: 感謝Caleb的回答,這是最後一段代碼,讓我能夠得到我以後的樣子:

我的最終解決方案是繼承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 :)呈現的,因此我無法控制在那裏繪制的任何元素。

最佳答案

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

轉載註明原文: 動畫UITableViewCell ContentView在進入編輯模式時淡出