移动单元格时,tableViewCell的背景颜色是否可以动画?

时间:2018-04-07 19:39:05

标签: ios uitableview animation background-color

我基本上使用以下代码为tableViewCell的移动设置动画:

tableView.performBatchUpdates({ 
  tableView.moveRow(at: fromIndexPath, to: toIndexPath)
}, completion: nil)  

我的问题是:

在移动过程中是否可以为单元格的backgroundColor属性设置动画?

我尝试在backgroundColor块中设置新的performBatchUpdates,但它没有动画。
我知道我可以使用performBatchUpdatesbeginUpdates()附带的endUpdates()说明,但这可能等同于使用performBatchUpdates块。

1 个答案:

答案 0 :(得分:0)

我在this tutorial找到了解决方案。它可以通过使用核心动画的功能来完成 tableView.performBatchUpdates块必须包含在CATransaction.begin()CATransaction.commit()中,并且必须为CABasicAnimation设置backgroundColor

    CATransaction.begin()
    tableView.performBatchUpdates({ 
        for (from, to) in movements {
            tableView.moveRow(at: from, to: to)
            guard let cell = tableView.cellForRow(at: from) else { return }
            let backgroundColorAnimation = CABasicAnimation(keyPath: #keyPath(CALayer.backgroundColor))
            backgroundColorAnimation.fromValue = cell.backgroundColor?.cgColor
            backgroundColorAnimation.toValue = kToBackgroundcolor.cgColor
            cell.layer.backgroundColor = kToBackgroundcolor.cgColor
            cell.layer.add(backgroundColorAnimation, forKey: #keyPath(CALayer.backgroundColor))
        }
    }, completion: { (finished) in
        // some code
    }
    )
    CATransaction.commit()

在这种情况下,移动的单元格的背景颜色与移动一起动画化。当然,这也适用于其他可动画的属性。