NSSplitViewItem.isCollapsed 忽略动画持续时间

NSSplitViewItem.isCollapsed ignores animation durations

我正在尝试像这样折叠 NSSplitViewItem

NSAnimationContext.runAnimationGroup({ context in
    context.duration = 0.1
    context.allowsImplicitAnimation = true
    searchItem.isCollapsed = collapsed
}, completionHandler: {
    // do stuff
})

无论我为 duration 设置什么,折叠动画的动画持续时间都不会改变。

CATransaction 上设置持续时间也不起作用。

检查它提到的头文件:

The exact animation used can be customized by setting it in the -animations dictionary with a key of "collapsed".

这引发了更多问题。我什么时候设置这个动画?我用这个动画为什么键路径设置动画?它期望什么 to/from 值?等等...我只想改变它的持续时间。

解决方案:

根据@Loengard 的回答,这就是我的做法

NSAnimationContext.runAnimationGroup { _ in
    let animation = CABasicAnimation(keyPath: nil)
    animation.duration = 0.1

    searchItem.animations["collapsed"] = animation
    searchItem.animator().isCollapsed = collapsed
}

头文件引用的字典是searchItem.animations。您不需要指定 fromValue 或 toValue,只需像这样自定义持续时间:

    NSAnimationContext.runAnimationGroup({ context in
        context.duration = 0.1
        context.allowsImplicitAnimation = true

        let collapseAnimation = CABasicAnimation(keyPath: "collapsed")
        collapseAnimation.duration = 0.1

        var existingAnimations = searchItem.animations
        existingAnimations["collapsed"] = collapseAnimation
        searchItem.animations = existingAnimations

        searchItem.isCollapsed = !searchItem.isCollapsed

    }) {  }