Swift version (macOS)
This color interpolation can be achieved with the simple line:
let color = NSColor.green.interpolate(.blue, 0.5)
Add this extension to your project:
extension NSColor{
/**
* Interpolates between two NSColors
* EXAMPLE: NSColor.green.interpolate(.blue, 0.5)
* NOTE: There is also a native alternative: NSColor.green.blended(withFraction: 0.5, of: .blue)
*/
func interpolate(_ to:NSColor,_ scalar:CGFloat)->NSColor{
func interpolate(_ start:CGFloat,_ end:CGFloat,_ scalar:CGFloat)->CGFloat{
return start + (end - start) * scalar
}
let fromRGBColor:NSColor = self.usingColorSpace(.genericRGB)!
let toRGBColor:NSColor = to.usingColorSpace(.genericRGB)!
let red:CGFloat = interpolate(fromRGBColor.redComponent, toRGBColor.redComponent,scalar)
let green:CGFloat = interpolate(fromRGBColor.greenComponent, toRGBColor.greenComponent,scalar)
let blue:CGFloat = interpolate(fromRGBColor.blueComponent, toRGBColor.blueComponent,scalar)
let alpha:CGFloat = interpolate(fromRGBColor.alphaComponent, toRGBColor.alphaComponent,scalar)
return NSColor.init(red: red, green: green, blue: blue, alpha: alpha)
}
}
The bellow animation was achived with this extension and AnimLib
