iOS - UICollectionView - 一次插入多个项目时,如何让它们一个接一个淡入淡出而不是同时淡入淡出?
iOS - UICollectionView - When inserting multiple items at once, how can you fade them in one after the other instead of simultaneously?
当您有一个集合视图并通过插入一些来更改项目时,默认布局会同时淡入它们。是否有可能将它们一个接一个地淡入淡出?
我正在考虑子类化 UICollectionViewLayout
,但我不确定那样是否可行。
我真的必须添加逻辑才能避免一次插入多个数据吗? (所以我插入一个项目,等一下,插入第二个项目,......手动完成)必须有更好的方法。希望
感谢您的帮助
如果您想一次将它们淡入淡出,则必须将一个添加到您的模型并重新加载该项目,然后延迟(例如 asyncAfter
)并执行下一个。请注意,您不能一次将所有这些添加到您的模型中,而只是推迟重新加载集合视图的各个项目。您必须推迟模型的更新和集合视图中相应项目的重新加载。例如:
private func append(_ objectsToAdd: [Foo]) {
for i in 0 ..< objectsToAdd.count {
DispatchQueue.main.asyncAfter(deadline: .now() + Double(i) * 0.25) {
self.objects.append(objectsToAdd[i])
self.collectionView?.insertItems(at: [IndexPath(item: self.objects.count - 1, section: 0)])
}
}
}
结果:
不需要 UICollectionViewLayout
的子类化。
当您有一个集合视图并通过插入一些来更改项目时,默认布局会同时淡入它们。是否有可能将它们一个接一个地淡入淡出?
我正在考虑子类化 UICollectionViewLayout
,但我不确定那样是否可行。
我真的必须添加逻辑才能避免一次插入多个数据吗? (所以我插入一个项目,等一下,插入第二个项目,......手动完成)必须有更好的方法。希望
感谢您的帮助
如果您想一次将它们淡入淡出,则必须将一个添加到您的模型并重新加载该项目,然后延迟(例如 asyncAfter
)并执行下一个。请注意,您不能一次将所有这些添加到您的模型中,而只是推迟重新加载集合视图的各个项目。您必须推迟模型的更新和集合视图中相应项目的重新加载。例如:
private func append(_ objectsToAdd: [Foo]) {
for i in 0 ..< objectsToAdd.count {
DispatchQueue.main.asyncAfter(deadline: .now() + Double(i) * 0.25) {
self.objects.append(objectsToAdd[i])
self.collectionView?.insertItems(at: [IndexPath(item: self.objects.count - 1, section: 0)])
}
}
}
结果:
不需要 UICollectionViewLayout
的子类化。