以编程方式修改NSSwitch状态时是否可以添加动画效果?
解决方案
直接给state属性赋值默认不会触发过渡动画,需要嵌套到AppKit的动画上下文中执行,或者调用控件的animator代理执行修改:
方案1:使用NSAnimationContext控制动画(全版本适配)
func turnSwitchOn() { NSAnimationContext.runAnimationGroup { context in // 可选配置:自定义动画时长,默认值为0.25秒 context.duration = 0.3 context.allowsImplicitAnimation = true trigger1ToggleOut.state = .on } }
如果需要切换到关闭状态,把.on改为.off即可,逻辑完全一致。
方案2:使用animator代理(仅支持macOS 10.15+)
写法更简洁,直接通过animator对象修改状态即可自动触发默认动画:
func turnSwitchOn() { trigger1ToggleOut.animator().state = .on }
扩展说明
如果需要在动画结束后执行额外逻辑,可以在动画组的完成闭包中添加对应代码:
func turnSwitchOn() { NSAnimationContext.runAnimationGroup { context in context.duration = 0.3 context.allowsImplicitAnimation = true trigger1ToggleOut.state = .on } completionHandler: { // 动画结束后执行的逻辑 print("开关状态切换完成") } }
如果调用后没有出现动画,可先检查控件的isEnabled、isHidden属性是否被设置为特殊值,影响了动画渲染逻辑。
内容的提问来源于stack exchange,提问作者moonmonkey
相关产品推荐
相关产品推荐

