NSSplitViewItem.isCollapsed忽略动画持续时间

时间:2019-04-08 09:51:48

标签: swift macos cocoa

我正试图像这样折叠NSSplitViewItem

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

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

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

检查头文件时,它会提到:

  

可以通过设置使用的确切动画进行自定义   在-animations词典中,键为“ collapsed”。

这引发了更多问题。什么时候设置此动画?我要为该动画设置什么关键路径动画?它期望/从价值中得到什么?等等...我要做的就是更改其持续时间。

解决方案:

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

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

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

1 个答案:

答案 0 :(得分:0)

头文件引用的字典是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

    }) {  }