此问题的代码位于GitHub:Circles
我正在尝试使用自定义布局“动画化”UICollectionView的扩展。
起始位置是:
结束位置是:
问题在于,当使用各种不同的策略循环遍历自定义布局数组时,扩展不会逐步进行:
for layout in self.layoutArray { //where layoutArray is an array of UICollectionViewLayout(s)
// DispatchQueue.main.async {
self.circleCollectionView.collectionViewLayout.invalidateLayout()
self.circleCollectionView.setCollectionViewLayout(layout, animated: true)
self.circleCollectionView.reloadData()
// }
}
基本上,上面的“等待”显示中间步骤,然后在显示之前立即执行(我认为 - 可能只是做最后一步)。
我可以“逐步完成布局”,每个“中间”加载并按预期显示:
@IBAction func stepAction(_ sender: Any) {
z = z + 1 //stepping through layoutArray
// DispatchQueue.main.async {
self.circleCollectionView.collectionViewLayout.invalidateLayout()
self.circleCollectionView.setCollectionViewLayout(self.layoutArray[self.z], animated: true)
//self.circleCollectionView.reloadData()
//}
}
单步:
我已经彻底浏览了gitHub和其他地方,但找不到答案。
BTW,
DispatchQueue.main.async
以及其他几种“强制”完成流程的方法,似乎无法解决问题。