UICollectionView 在过渡期间为单个项目设置动画

Posted

技术标签:

【中文标题】UICollectionView 在过渡期间为单个项目设置动画【英文标题】:UICollectionView animate individual items during transition 【发布时间】:2014-01-21 10:26:50 【问题描述】:

当我转换到子视图控制器时,是否可以在 UICollectionView 中单独为每个项目设置动画?我有一个UICollectionViewController,当一个项目被选中时,我希望该项目周围的所有项目都从所选项目反弹。

【问题讨论】:

【参考方案1】:

您描述的内容听起来像是 UICollectionView 中的 layoutTransition。我的建议是通过子类化 UICollectionViewLayout 并覆盖来创建一个新布局

- (UICollectionViewLayoutAttributes *)layoutAttributesForItemAtIndexPath:(NSIndexPath *)indexPath

您可以在此处修改项目的框架以创建您正在寻找的效果。特别是,您可以跟踪选择的 indexPath 并保持该项目不受影响。其余的你可以做这样的事情:

CGRect selectedItemFrame = [[super layoutAttributesForItemAtIndexPath:self.selectedIndexPath] frame];

CGFloat xOffset = attributes.frame.origin.x <= selectedItemFrame.origin.x ? -400.0 : 400.0;
CGFloat yOffset = attributes.frame.origin.y <= selectedItemFrame.origin.y ? -600.0 : 600.0;
CGRect newFrame = CGRectOffset(attributes.frame, xOffset, yOffset);
attributes.frame = newFrame;

然后,只需触发从一种布局到另一种布局的过渡。

【讨论】:

以上是关于UICollectionView 在过渡期间为单个项目设置动画的主要内容,如果未能解决你的问题,请参考以下文章

swift: uicollectionview 在过渡期间更改单元格的 contentoffset

如何在布局转换期间为集合视图单元格的边框宽度/颜色设置动画?

Swift UICollectionView 单元格过渡效果

自定义 UICollectionView 分页过渡

collectionview reloadData时如何自定义UICollectionView过渡动画?

将 UICollectionView 部分中的所有项目替换为一项(组合单元格)