【问题标题】:Change NSTextField text color with fade animation - Cocoa使用淡入淡出动画更改 NSTextField 文本颜色 - Cocoa
【发布时间】:2021-07-19 01:38:43
【问题描述】:

我正在尝试使用 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
        }
   }

【问题讨论】:

  • “但它不起作用”是什么意思?当你点击按钮时会发生什么?
  • @ElTomato,标签文本颜色设置为red。但是没有动画。我需要用动画改变文本颜色。
  • 有两个文本字段,其中一个更改其 alphaValue,另一个显示最终文本颜色。
  • @ElTomato,是的,我会努力的!谢谢。

标签: swift cocoa nsanimationcontext


【解决方案1】:

这是一种可能的解决方案的概要:

  • 子类NSAnimation,比如TextColorAnimation
  • init 接受NSTextField 和最终NSColor
  • 根据 NSAnimation 文档覆盖 currentProgress 以 (a) 调用超级实现并 (b) 设置中间颜色和 display NSTextField
  • 使用NSColor.blend(...)确定中间色
  • start这个NSAnimation

你应该得到一个很好的平滑颜色过渡。高温

【讨论】:

    【解决方案2】:

    在完成处理程序中更新颜色和 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: {
            })
        })
     }
    

    【讨论】:

    • 非常感谢您的回答。动画有点不流畅。
    • 使用 CAMediaTimingFunctionName(例如 linear、easeIn)播放或删除动画块以完成您想要的外观。
    • 当然,我会试试的。感谢您的帮助:)
    猜你喜欢
    • 2023-04-10
    • 1970-01-01
    • 2021-07-06
    • 1970-01-01
    • 1970-01-01
    • 2011-09-06
    • 1970-01-01
    • 2018-12-11
    • 1970-01-01
    相关资源
    最近更新 更多