最近做项目有一个点击按钮改变cell高度的需求,心想简单
[self.tableView beginUpdates];
[self.tableView endUpdates];
[self.tableView reloadData];
这就完事儿了,然而一运行秒被打脸,因为reload方法会覆盖掉动画效果!这坑爹玩意儿。。。
查了一下资料,原来beginUpdates本质上就是添加了一个动画事务,即CATransaction,当然这个事务可能包含许多操作,比如会重新调整每个cell的高度(但是默认不会重新加载cell---划重点),所以才需要执行坑爹的reload啊!如果仅仅是改变高度,上面的前两句代码就够用了,下面把还需要重新加载cell的动画代码给大家贴一下
//设置动画执行时间
[UIView animateWithDuration:0.15f delay:0.0 options:UIViewAnimationOptionCurveEaseInOut animations:^{
//监听tableview动画执行结束时间
[CATransaction begin];
[CATransaction setCompletionBlock:^{
//tableview动画结束回调
[weakSelf.tableView reloadData];
}];
[weakSelf.tableView beginUpdates];
[weakSelf.tableView endUpdates];
[CATransaction commit];
}completion:^(BOOL finished) {
//UIView动画结束回调
}];
基本上就是这个逻辑,如有问题,欢迎交流~