Reputation:
I am trying to change NSTextField
text color with fade animation by using NSAnimationContext
. But it's not working. Please help me to solve this issue. Thanking you all!
Code:
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
}
}
Upvotes: 0
Views: 281
Reputation: 3750
Update the color and alpha value in the completion handler:
@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: {
})
})
}
Upvotes: 0
Reputation: 53010
Here is the outline of one possible solution:
NSAnimation
, say with TextColorAnimation
init
take the NSTextField
and final NSColor
currentProgress
as per NSAnimation
docs to (a) call the super implementation and (b) set the intermediate color and display
the NSTextField
NSColor.blend(...)
to determine the intermediate colorstart
this NSAnimation
You should get a nice smooth color transition. HTH
Upvotes: 1