新浪博客

UICollectionView的reloadData方法UI更新滞后性

2015-12-08 14:43阅读:
--------------------------------------------2015-12-17更新-------------------------------------------------
有同行指出了一个新的方法,可以实现这样的效果:
[self.collectionView performBatchUpdates:^{

} completion:^(BOOL finished) {

}];
---------------------------------------------------------------------------------------------------------------
最近几天在做一个相册视图控制器,在每次上传新照片时,会刷新collectionView的数据,然后在新增的cell上显示上传进度。如下图所示: UICollectionView的reloadData方法UI更新滞后性

但实际代码中发现,我在每次新增图片时,调用collectionView的reloadData方法,然后获取新的cell时,会出现新的cell为nil的情况,在打了断点后发现,reloadData会重新调用collectionView的各个数据代理方法,但这些方法是异步的,不是在主线程中,所以在我取cell之后这些方法才会执行,就导致了我的cell取到空的情况。
这个时候block的方便性就体现了出来,首先,声明一个block属性,在cell创建时调用。 UICollectionView的reloadData方法UI更新滞后性
UICollectionView的reloadData方法UI更新滞后性
UICollectionView的reloadData方法UI更新滞后性
这个方法虽然达到了效果,但如果细心就会发现,有可能会出错,每个cell在创建时都会调用这个block,如果我们需要添加的cell还未创建,这个时候,block就相当于提前执行了,所以,这个时候,我们要给block加一个参数,当这个数值达到我们需要的数值,也就是全部cell都创建完成,才调取这个block。
UICollectionView的reloadData方法UI更新滞后性

UICollectionView的reloadData方法UI更新滞后性
UICollectionView的reloadData方法UI更新滞后性

我的更多文章

下载客户端阅读体验更佳

APP专享