如何同步单元格 expand/collapse 和 collectionview 动画?
How to sync cell expand/collapse and collectionview animations?
我有一个带有可扩展单元格的 UICollectionView(只需将以下代码粘贴到一个空项目中(xcode - 新的 - 带情节提要的 uikit 应用程序):
https://gist.github.com/smocer/e8c4bb3c5465c1a01bcf6aa33e0fd9dc
当单元格展开和 collectionview 布局更新动画不同步时我遇到了一个问题(单元格立即展开,而其他单元格移动平滑):
值得注意的是,出于某种原因,折叠动画实际上与 UICollectionView 动画同步。
问题是,如何在不使用 hack 或解决方法的情况下同步它们?我的意思是,我可以使用 Core Animation 向 Cell 层添加一些动画,但是,我必须手动调整持续时间值,因为我不知道 UICollectionView 需要多长时间才能为其项目设置动画。
如果不可能,最好的方法是什么?
如果您只是更改单元格的布局,则无需重新加载它,您可以使它无效 collectionViewLayout
:
func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
isExpanded[indexPath.item].toggle()
collectionView.collectionViewLayout.invalidateLayout()
UIView.animate(withDuration: 0.25) {
collectionView.layoutIfNeeded()
}
}
现在项目以相同的动画持续时间展开/折叠,您也可以调整。
试试这个:
UIView.animate(withDuration: 0.3) {
collectionView.performBatchUpdates({}) { _ in
collectionView.layoutIfNeeded()
}
}
我有一个带有可扩展单元格的 UICollectionView(只需将以下代码粘贴到一个空项目中(xcode - 新的 - 带情节提要的 uikit 应用程序):
https://gist.github.com/smocer/e8c4bb3c5465c1a01bcf6aa33e0fd9dc
当单元格展开和 collectionview 布局更新动画不同步时我遇到了一个问题(单元格立即展开,而其他单元格移动平滑):
值得注意的是,出于某种原因,折叠动画实际上与 UICollectionView 动画同步。
问题是,如何在不使用 hack 或解决方法的情况下同步它们?我的意思是,我可以使用 Core Animation 向 Cell 层添加一些动画,但是,我必须手动调整持续时间值,因为我不知道 UICollectionView 需要多长时间才能为其项目设置动画。
如果不可能,最好的方法是什么?
如果您只是更改单元格的布局,则无需重新加载它,您可以使它无效 collectionViewLayout
:
func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
isExpanded[indexPath.item].toggle()
collectionView.collectionViewLayout.invalidateLayout()
UIView.animate(withDuration: 0.25) {
collectionView.layoutIfNeeded()
}
}
现在项目以相同的动画持续时间展开/折叠,您也可以调整。
试试这个:
UIView.animate(withDuration: 0.3) {
collectionView.performBatchUpdates({}) { _ in
collectionView.layoutIfNeeded()
}
}