如何更改自定义 UICollectionView 布局引擎中的默认布局动画曲线?

Posted

技术标签:

【中文标题】如何更改自定义 UICollectionView 布局引擎中的默认布局动画曲线?【英文标题】:How to change the default layout animation curve in a custom UICollectionView layout engine? 【发布时间】:2016-02-08 12:02:23 【问题描述】:

我有一个集合视图设置,可以使用自定义集合视图布局运行。我可以通过更改 UICollectionViewLayoutAttributes 上的转换和 alpha 来设置单元格出现和消失的动画,但是,我想将动画曲线更改为使用弹簧 + 阻尼,以使单元格在出现时“弹跳”。

有人知道我如何实现这一目标吗?

谢谢,

【问题讨论】:

你现在使用什么代码? 你可以通过使用UIKitDynamics来做到这一点,有一篇关于它的非常好的博客文章。 shinobicontrols.com/blog/ios7-day-by-day-day-0-uikit-dynamicsshinobicontrols.com/blog/…你要下载博客中用到的代码这里是仓库github.com/shinobicontrols/iOS7-day-by-day 我正在使用一个自定义 UICollectionViewLayout 子类来覆盖该方法:initialLayoutAttributesForAppearingItemAtIndexPath 【参考方案1】:

将 UICollectionView 的 deleteItems/insertItems/reloadItems 调用封装在 UIView.animateWithDuration:delay:options:animations:completion: 调用中。

例子:

let duration = 0.25 // Hardcoded keyboard animation duration and curve
let curve = UIViewAnimationOptions(rawValue: 7 << 16) // ↑
UIView.animate(withDuration: duration, delay: 0, options: curve, animations: ( [weak self] in
    self?.collectionView?.performBatchUpdates(
        self?.collectionView?.deleteItems(at: deletedIPs)
        self?.collectionView?.insertItems(at: insertedIPs)
        self?.collectionView?.reloadItems(at: updatedIPs)
    , completion: nil)
), completion: nil)

【讨论】:

以上是关于如何更改自定义 UICollectionView 布局引擎中的默认布局动画曲线?的主要内容,如果未能解决你的问题,请参考以下文章

Swift - UICollectionView:如何在标题中自动布局标签间距

如何在 iOS 中动态更改 UICollectionView 单元格高度

如何更改自定义 CollectionViewCell 的背景颜色?

带有自定义 UICollectionViewCell 的 UICollectionView

UICollectionView 布局自定义

UICollectionView 自定义单元格访问单元格外的属性