如何在范围更改时为NSCollectionViewLayout的重新布局设置动画?

时间:2018-08-30 07:07:03

标签: cocoa appkit nscollectionview nscollectionviewflowlayout nscollectionviewlayout

我有一个NSCollectionViewLayout的基本实现,非常类似于NSCollectionViewFlowLayout

它将项目水平放置。如果没有足够的空间,则将下一项添加到下一行,依此类推。

我的问题:当项目从第一行移动到第二行时,如何为布局更改设置动画?

这是一个例子:

Relayout

请注意项目#3如何从第一行跳到第二行。我想动画化这一变化。

有很多方法可以对添加/删除项目进行动画处理,但是当项目没有变化时,我无法弄清楚如何对布局更改进行动画处理。

1 个答案:

答案 0 :(得分:0)

您要在布局子类中覆盖的方法是prepare(forAnimatedBoundsChange:)finalizeAnimatedBoundsChange()

从文档中:

open func prepare(forAnimatedBoundsChange oldBounds: NSRect) // NSCollectionView calls this when its bounds have changed inside an animation block before displaying items in its new bounds
     

准备布局对象以对集合视图的边界进行动画更改,或插入或删除项目。

open func finalizeAnimatedBoundsChange() // also called inside the animation block
     

在对集合视图的边界进行任何动画更改之后,或者在插入或删除项目之后进行清理。