Swiftで、**アルファ付きの色同士を重ねたときの色を取得する(アルファブレンドする)**処理の実装方法。

実装
UIColor+overlayColor.swift
extension UIColor {
/// 色を重ね合わせたときの色を生成する
/// 参考 https://ja.wikipedia.org/wiki/アルファブレンド
func overlayColor(_ otherColor: UIColor) -> UIColor {
/// 背景
var (dstR, dstG, dstB, dstA) = (CGFloat(0), CGFloat(0), CGFloat(0), CGFloat(0))
/// 前景
var (srcR, srcG, srcB, srcA) = (CGFloat(0), CGFloat(0), CGFloat(0), CGFloat(0))
getRed(&dstR, green: &dstG, blue: &dstB, alpha: &dstA)
otherColor.getRed(&srcR, green: &srcG, blue: &srcB, alpha: &srcA)
let outA = srcA + dstA - dstA * srcA
let outR = (srcR * srcA + dstR * dstA * (1 - srcA)) / outA
let outG = (srcG * srcA + dstG * dstA * (1 - srcA)) / outA
let outB = (srcB * srcA + dstB * dstA * (1 - srcA)) / outA
return UIColor(red: outR,
green: outG,
blue: outB,
alpha: outA)
}
}
生成された色

矢印で示された部分が今回作成したメソッドで計算された色です。
サンプルコード
Playgroundを作成しました。動作確認をしたい方はこちらからどうぞ。
https://github.com/zrn-ns/OverlayColor/
謝辞
実装は下記のサイトを参考にさせていただきました。