我基本上使用以下代码为tableViewCell
的移动设置动画:
tableView.performBatchUpdates({
tableView.moveRow(at: fromIndexPath, to: toIndexPath)
}, completion: nil)
我的问题是:
在移动过程中是否可以为单元格的backgroundColor
属性设置动画?
我尝试在backgroundColor
块中设置新的performBatchUpdates
,但它没有动画。
我知道我可以使用performBatchUpdates
和beginUpdates()
附带的endUpdates()
说明,但这可能等同于使用performBatchUpdates
块。
答案 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()
在这种情况下,移动的单元格的背景颜色与移动一起动画化。当然,这也适用于其他可动画的属性。