多个 CollectionView PerformBatchUpdates

Posted

技术标签:

【中文标题】多个 CollectionView PerformBatchUpdates【英文标题】:Multiple UICollectionView PerformBatchUpdate 【发布时间】:2015-12-09 09:38:58 【问题描述】:

我正在UICollectionView 中使用自定义布局和流程制作一些动画。

当我想为我的UICollectionViews 设置动画时,我正在这样做:

    [localCollectionView performBatchUpdates:^
         [localCollectionView insertItemsAtIndexPaths:indexPaths];
      completion:^(BOOL finished) 
         [localLabelCollectionView performBatchUpdates:^ //problem here
              [localLabelCollectionView insertItemsAtIndexPaths:indexPaths];

           completion:^(BOOL finished) 
              hatching = NO;
          ];

     ];
    使用批处理为我的第一个集合视图制作动画 完成后,为我的第二个集合视图设置动画

问题是当第一次立即执行时,第二次执行真的很慢(比如动画前 5 秒或更长时间),就像它的完成调用一样。

我什至试着像这样分开做:

    [localCollectionView performBatchUpdates:^
         [localCollectionView insertItemsAtIndexPaths:indexPaths];
      completion:^(BOOL finished) 
     ];

    [localLabelCollectionView performBatchUpdates:^ //problem here
              [localLabelCollectionView insertItemsAtIndexPaths:indexPaths];

           completion:^(BOOL finished) 
              hatching = NO;
          ];

出现同样的问题。欢迎任何建议或解释。

附:

对我来说,第一个解决方案必须工作,因为只使用主 UI 线程进行动画处理。这就是为什么我认为第二个示例(不处理最糟糕的 UI 动画)无法工作的原因。

【问题讨论】:

【参考方案1】:

它是这样做的,并且像魅力一样工作:

[localCollectionView performBatchUpdates:^
     [localCollectionView insertItemsAtIndexPaths:indexPaths];
     [localLabelCollectionView insertItemsAtIndexPaths:indexPaths];
 completion:^(BOOL finished) 
    hatching = NO;
];

似乎 performBatch 在多次调用时更新入队本身(甚至在不同的对象上)。

【讨论】:

以上是关于多个 CollectionView PerformBatchUpdates的主要内容,如果未能解决你的问题,请参考以下文章

一个 ViewController 中的多个 CollectionView

多个 CollectionView PerformBatchUpdates

Swift - 如何在具有多个部分的 collectionView 上执行 BatchUpdates

多个tableview单元格内的Collectionview,如何处理选择?

tableView 单元格内的多个 collectionView 单元格在滚动时更改设计

Swift - AlamofireImage 下载多个 URL 并显示在 CollectionView 中