【问题标题】:How to animate a relayout of NSCollectionViewLayout on bounds change?如何在边界更改时为 NSCollectionViewLayout 的重新布局设置动画?
【发布时间】:2018-08-30 07:07:02
【问题描述】:

我有一个与NSCollectionViewFlowLayout 非常相似的NSCollectionViewLayout 的基本实现:

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

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

这是一个例子:

注意项目#3 如何从第一行“跳到”第二行。我想为这种变化制作动画。

有很多方法可以动画添加/删除项目,但我无法弄清楚如何在没有项目更改时为布局更改设置动画。

【问题讨论】:

    标签: cocoa appkit nscollectionview nscollectionviewflowlayout nscollectionviewlayout


    【解决方案1】:

    您希望在布局子类中覆盖的方法是 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
    

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

    【讨论】:

    • 你能用一些示例代码扩展这个答案吗?这些是正确的钩子,但不清楚应该在方法中放置哪些代码。谢谢。
    猜你喜欢
    • 2014-05-02
    • 1970-01-01
    • 1970-01-01
    • 2023-03-20
    • 2023-03-08
    • 2021-10-17
    • 1970-01-01
    • 1970-01-01
    • 2016-11-22
    相关资源
    最近更新 更多