使用淡入淡出动画更改 NSTextField 文本颜色 - Cocoa
Change NSTextField text color with fade animation - Cocoa
我正在尝试使用 NSAnimationContext
来更改 NSTextField
带有淡入淡出动画的文本颜色。但它不起作用。请帮我解决这个问题。谢谢大家!
代码:
override func viewDidLoad() {
super.viewDidLoad()
label!.animator().textColor = NSColor.black
}
@IBAction func changeColor(_ sender: NSButton){
NSAnimationContext.runAnimationGroup { (context) in
context.duration = 1.0
label!.animator().textColor = NSColor.red
}
}
这是一种可能的解决方案的概要:
- 子类
NSAnimation
,用TextColorAnimation
表示
- 让
init
参加 NSTextField
和决赛 NSColor
- 根据
NSAnimation
文档覆盖 currentProgress
以 (a) 调用超级实现和 (b) 设置中间颜色和 display
NSTextField
- 使用
NSColor.blend(...)
确定中间色
start
这个NSAnimation
你应该得到一个漂亮的平滑颜色过渡。 HTH
更新完成处理程序中的颜色和 alpha 值:
@IBAction func changeColor(_ sender: NSButton){
NSAnimationContext.runAnimationGroup({ [self] context in
context.duration = 1.0
context.timingFunction = CAMediaTimingFunction(name: .easeOut)
label.animator().alphaValue = 0.0
label.animator().textColor = NSColor.black
}, completionHandler: { [self] in
NSAnimationContext.runAnimationGroup({ [self] context in
context.duration = 1.0
context.timingFunction = CAMediaTimingFunction(name: .easeIn)
label.animator().alphaValue = 1.0
label.animator().textColor = NSColor.red
}, completionHandler: {
})
})
}
我正在尝试使用 NSAnimationContext
来更改 NSTextField
带有淡入淡出动画的文本颜色。但它不起作用。请帮我解决这个问题。谢谢大家!
代码:
override func viewDidLoad() {
super.viewDidLoad()
label!.animator().textColor = NSColor.black
}
@IBAction func changeColor(_ sender: NSButton){
NSAnimationContext.runAnimationGroup { (context) in
context.duration = 1.0
label!.animator().textColor = NSColor.red
}
}
这是一种可能的解决方案的概要:
- 子类
NSAnimation
,用TextColorAnimation
表示
- 让
init
参加NSTextField
和决赛NSColor
- 根据
NSAnimation
文档覆盖currentProgress
以 (a) 调用超级实现和 (b) 设置中间颜色和display
NSTextField
- 使用
NSColor.blend(...)
确定中间色 start
这个NSAnimation
你应该得到一个漂亮的平滑颜色过渡。 HTH
更新完成处理程序中的颜色和 alpha 值:
@IBAction func changeColor(_ sender: NSButton){
NSAnimationContext.runAnimationGroup({ [self] context in
context.duration = 1.0
context.timingFunction = CAMediaTimingFunction(name: .easeOut)
label.animator().alphaValue = 0.0
label.animator().textColor = NSColor.black
}, completionHandler: { [self] in
NSAnimationContext.runAnimationGroup({ [self] context in
context.duration = 1.0
context.timingFunction = CAMediaTimingFunction(name: .easeIn)
label.animator().alphaValue = 1.0
label.animator().textColor = NSColor.red
}, completionHandler: {
})
})
}