在另一行删除动画后插入行

时间:2016-04-04 10:11:19

标签: ios swift uitableview animation

我正在尝试在另一行删除动画完成后插入一行。我一直在尝试做以下事情:

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()移动到完成块来使其工作。但是当删除行时,插入动画仍然会动画。

还有另一种方法吗?

2 个答案:

答案 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?