如何使用持续时间为单个 UICollectionView 单元格设置动画

Posted

技术标签:

【中文标题】如何使用持续时间为单个 UICollectionView 单元格设置动画【英文标题】:How to animate single UICollectionView cell with duration 【发布时间】:2015-04-30 13:34:12 【问题描述】:

我正在尝试为第一个单元格的高度设置动画,其余的则向上或向下滚动。单元格内部是一个带有 .ScaleAspectFill

的图像视图

如果过渡与 invalidateLayout() 和 sizeForItemAtIndexPath 交互,我设法做到这一点,但我不知道如何动画到结束状态

这就是我正在做的事情:

let cell = collectionView!.cellForItemAtIndexPath(NSIndexPath(forItem: 0,    inSection: 0)) as! HomeFeedCell
var size:CGSize = getNewSize(cell)

UIView.transitionWithView(collectionView!, duration: duration, options: .CurveEaseOut | .LayoutSubviews, animations: 
                cell.frame.size.height = size.height
            , completion: nil)

这会为第一个单元格设置动画,但不会移动其余单元格。我尝试了 invalidateLayout() 或重新加载动画块内的可见单元格,但它给出了奇怪的结果

【问题讨论】:

【参考方案1】:

因此,如果有人遇到同样的问题,答案就是使用 nil 更新调用集合视图的 performBatchUpdates:块

let cell = collectionView!.cellForItemAtIndexPath(NSIndexPath(forItem: 0,    inSection: 0)) as! HomeFeedCell
var size:CGSize = getNewSize(cell)

UIView.transitionWithView(collectionView!, duration: duration, options: .CurveEaseOut | .LayoutSubviews, animations: 
                cell.frame.size.height = size.height
            , completion: nil)

collectionView!.performBatchUpdates(nil, completion: nil)

【讨论】:

此动画用于缩小视图(单元格)的大小,但 collectionviewcell 中的其他视图不会移动以填充空间。

以上是关于如何使用持续时间为单个 UICollectionView 单元格设置动画的主要内容,如果未能解决你的问题,请参考以下文章

确定 H.264 帧的持续时间

是否跨项目计算持续使用折扣?

如何在查询中编写单个聚合

如何使用部分在CollectionView中水平居中行

循环遍历数组并一次显示单个项目,动态持续时间,如 react js 中的 setTimeout 或 SetInterval

为啥 Spark Streaming 将每条 Kafka 消息保存为单个文件?