如何使用持续时间为单个 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 单元格设置动画的主要内容,如果未能解决你的问题,请参考以下文章
循环遍历数组并一次显示单个项目,动态持续时间,如 react js 中的 setTimeout 或 SetInterval