所以我试图做的事情在概念上非常简单,但是我找不到它的解决方案:
我正在尝试从使用:
动画的tableView中删除单元格self.coolTableView?.deleteRowsAtIndexPaths
函数,要做到这一点,我更改了dataSet并执行此操作,完成后我想再次更改数据集并使用:
self.coolTableView?.insertRowsAtIndexPaths
反映数据集的第二个更改并为其设置动画。 我遇到的问题是,如果我使用:
dispatch_async(dispatch_get_main_queue()) { () -> Void in
//Update tableview
}
他们似乎互相锁定,使用过的内存只是一直在暴涨而且它会挂起。我假设他们互相干扰。现在我的下一个想法是将代码更改为同步所以:
dispatch_sync(dispatch_get_main_queue()) { () -> Void in
//Update tableview
}
然而,第一次更新挂起并停止操作。通过我所做的研究,听起来我正在将块的执行放在当前正在运行的应用程序和vuwala后面的主队列中,这就是它挂起的原因。
阻止执行的正确方法是什么,直到我可以在主线程上完成动画,这样我就不会在动画发生之前炸掉我的数据源?
答案 0 :(得分:1)
iOS中的动画会占用动画终止时可以执行的块。尝试将关于coolTableView的操作放入一个闭包中(记住无主的self以不创建内存泄漏)并将其作为完成闭包传递给动画。
示例:
let someAnimations: () -> Void = {
//some animations
}
let manipulateTableView: (Bool) -> Void = {
isAnimationFinished in
// perform some data manipulation
}
UIView.animateWithDuration(0.5, animations: someAnimations, completion: manipulateTableView)