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
}) { }
我正在尝试像这样折叠 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
}) { }