我正在尝试在另一行删除动画完成后插入一行。我一直在尝试做以下事情:
tableView.beginUpdates()
CATransaction.begin()
CATransaction.setCompletionBlock {
tableView.insertRowsAtIndexPaths([indexPath], withRowAnimation: .Right)
}
tableView.deleteRowsAtIndexPaths([indexPath], withRowAnimation: .Left)
CATransaction.commit()
tableView.endUpdates
当行数与预期的不一样时,这给了我通常的断言失败。
然后我尝试使用带有完成块的UIView
动画:
tableView.beginUpdates()
func animations() {
tableView.deleteRowsAtIndexPaths([indexPath], withRowAnimation: .Left)
}
func completion() {
if count == self.payments.count && self.payments.isEmpty { insert() }
}
UIView.animateWithDuration(0.5, animations: { animations() }) { _ in completion() }
tableView.endUpdates()
两次尝试都给了我同样的错误。是否可以或应该查看用于插入/删除tableview行的自定义动画?
修改
我设法通过将tableView.endUpdates()
移动到完成块来使其工作。但是当删除行时,插入动画仍然会动画。
还有另一种方法吗?
答案 0 :(得分:0)
如果您知道动画需要多长时间才能完成,只需添加此函数以在执行某些代码之前等待一段时间:
setupUnitTextures()
用法:
func delay(delay:Double, closure:()->()) {
dispatch_after(
dispatch_time(
DISPATCH_TIME_NOW,
Int64(delay * Double(NSEC_PER_SEC))
),
dispatch_get_main_queue(), closure)
}
答案 1 :(得分:0)
我认为您将代码置于错误的位置
应该是这样的:
WS_THICKFRAME
参考:How to detect that animation has ended on UITableView beginUpdates/endUpdates?