Skip to content

Instantly share code, notes, and snippets.

@takayoshiotake
Last active December 22, 2016 15:06
Show Gist options
  • Select an option

  • Save takayoshiotake/5407f684041067cc464857737d7c01d9 to your computer and use it in GitHub Desktop.

Select an option

Save takayoshiotake/5407f684041067cc464857737d7c01d9 to your computer and use it in GitHub Desktop.
Color blending with Swift
#if os (macOS)
import AppKit
typealias ColorType = NSColor
#elseif os (iOS)
import UIKit
typealias ColorType = UIColor
#endif
extension ColorType {
var r: CGFloat {
get { return redComponent }
}
var g: CGFloat {
get { return greenComponent }
}
var b: CGFloat {
get { return blueComponent }
}
var a: CGFloat {
get { return alphaComponent }
}
}
func & (a: ColorType, b: ColorType) -> ColorType {
var temp = ColorType.init(red: a.r * a.a + b.r * b.a, green: a.g * a.a + b.g * b.a, blue: a.b * a.a + b.b * b.a, alpha: 1)
let m = [temp.r, temp.g, temp.b].max(by: { $0 < $1 })!
if m > 1 {
temp = ColorType.init(red: temp.r / m, green: temp.g / m, blue: temp.b / m, alpha: 1)
}
return temp
}
let orange = #colorLiteral(red: 1, green: 0, blue: 0, alpha: 1) & #colorLiteral(red: 0, green: 1, blue: 0, alpha: 0.5)
let pink = #colorLiteral(red: 1, green: 0, blue: 0, alpha: 1) & #colorLiteral(red: 1, green: 1, blue: 1, alpha: 1)
let white = #colorLiteral(red: 1, green: 0, blue: 0, alpha: 1) & #colorLiteral(red: 0, green: 1, blue: 0, alpha: 1) & #colorLiteral(red: 0, green: 0, blue: 1, alpha: 1)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment