我正在尝试在各种 UICollectionViewFlowLayout 子类之间制作动画。每个流布局指定不同的项目大小。一个显示横跨 3 个项目的网格,另一个显示横跨 2 个项目的网格,第三个显示横跨 1 个项目的网格(看起来像 UITableView)。
我正在调用 setCollectionViewLayout:animated: 来执行此操作。单元格大小的动画效果很好。然而, subview 有点乱。每个单元格包含一个图像和一个标签(现在已经删除了标签)。我希望图像随着单元格大小的变化而改变其大小,标签也是如此。
如果我使用自动布局(目前还不是很擅长)来布局我的单元格的 subview ,那么在动画开始时图像会调整到目标单元格框架。我了解 UIView 动画的工作原理,因为它们会立即更改动画属性并且动画是在表示层中完成的,但我希望自动布局以某种方式以不同方式工作。
如果我删除自动布局并在 initWithFrame 中执行以下操作:
[[self imageView] setAutoresizingMask:UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleRightMargin];
然后图像 subview 的大小动画效果非常好,但是在循环播放一些动画后,图像 subview 的大小和位置在某些情况下不正确。
我试过在 layoutSubviews 中布置 subview ,但这给出了与 AutoLayout 相同的结果。
我在 github 上看到的所有在 UICollectionViewLayout 之间设置动画的演示都只有一个彩色背景或一个填充整个单元格的 subview 。有没有人设法让这个工作?
下面是正在发生的事情的图像(红线是 UIImageView 的边框):
最佳答案
要让它与 AutoLayout 一起工作,您需要将以下内容放入您的 UICollectionViewCell 子类中:
- (void)applyLayoutAttributes:(UICollectionViewLayoutAttributes *)layoutAttributes {
[UIView animateWithDuration:animationDuration animations:^{
[self layoutIfNeeded];
}];
}
默认动画持续时间约为 0.33 秒(根据实验确定)。
关于objective-c - 通过切换布局触发动画 UICollectionView 单元格调整大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20087187/