我正在尝试像这样折叠 NSSplitViewItem
NSAnimationContext.runAnimationGroup({ context in
context.duration = 0.1
context.allowsImplicitAnimation = true
searchItem.isCollapsed = collapsed
}, completionHandler: {
// do stuff
})
无论我设置什么持续时间
,折叠动画的动画持续时间都不会改变。
设置 CATransaction
的持续时间也不起作用。
检查头文件,它提到了这一点:
The exact animation used can be customized by setting it in the -animations dictionary with a key of "collapsed".
这引发了更多问题。我什么时候设置这个动画?我用什么键路径来制作这个动画?它期望什么值?等等...我想做的就是改变它的持续时间。
解决方案:
根据 @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
}) { }
关于swift - NSSplitViewItem.isCollapsed 忽略动画持续时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55570683/