use*_*955 2 uicolor ios sprite-kit swift
我有一个 iOS SKColor,我想将其转换为较浅的阴影(即不透明,没有不透明度/无透明度),因此我想使用 HSL 亮度实现一个函数,该函数返回 SKColor。IE。在函数内部,将原始 SKColor 转换为 HSL 等效值,然后对 HSL 亮度应用一个值以获得更浅的色调,然后将此 HSL 颜色转换回我可以使用的 SKColor。
Xcode 14.3 \xe2\x80\xa2 斯威夫特 5.8
\nextension UIColor {\n\n convenience init(\n hue: CGFloat,\n saturation: CGFloat,\n lightness: CGFloat,\n alpha: CGFloat = 1\n ) {\n let offset = saturation * (lightness < 0.5 ? lightness : 1 - lightness)\n let brightness = lightness + offset\n let saturation = lightness > 0 ? 2 * offset / brightness : 0\n self.init(hue: hue, saturation: saturation, brightness: brightness, alpha: alpha)\n }\n\n var hsl: (\n hue: CGFloat,\n saturation: CGFloat,\n lightness: CGFloat,\n alpha: CGFloat\n )? {\n var (red, green, blue, alpha, hue): (CGFloat, CGFloat, CGFloat, CGFloat, CGFloat) = (0, 0, 0, 0, 0)\n guard\n getRed(&red, green: &green, blue: &blue, alpha: &alpha),\n getHue(&hue, saturation: nil, brightness: nil, alpha: nil)\n else {\n return nil\n }\n let upper = max(red, green, blue)\n let lower = min(red, green, blue)\n let range = upper - lower\n let lightness = (upper + lower) / 2\n let saturation = range == 0 ? 0 : range / (lightness < 0.5 ? lightness * 2 : 2 - lightness * 2)\n return (hue, saturation, lightness, alpha)\n }\n\n func getHSL(_ hue: UnsafeMutablePointer<CGFloat>?, saturation: UnsafeMutablePointer<CGFloat>?, lightness: UnsafeMutablePointer<CGFloat>?, alpha: UnsafeMutablePointer<CGFloat>?) -> Bool {\n guard let hsl else { return false }\n hue?.pointee = hsl.hue\n saturation?.pointee = hsl.saturation\n lightness?.pointee = hsl.lightness\n alpha?.pointee = hsl.alpha\n return true\n }\n}\nRun Code Online (Sandbox Code Playgroud)\nextension UIColor {\n\n var lighter: UIColor? { adding(lightness: 0.1) }\n var darker: UIColor? { adding(lightness: -0.1) }\n\n func adding(lightness value: CGFloat) -> UIColor? {\n guard let hsl else { return nil }\n return UIColor(\n hue: hsl.hue,\n saturation: hsl.saturation,\n lightness: min(max(hsl.lightness + value, 0),1),\n alpha: hsl.alpha\n )\n }\n\n func applying(lightness value: CGFloat) -> UIColor? {\n guard let hsl else { return nil }\n return UIColor(\n hue: hsl.hue,\n saturation: hsl.saturation,\n lightness: value,\n alpha: hsl.alpha\n )\n }\n}\nRun Code Online (Sandbox Code Playgroud)\nlet purple = UIColor(red: 160/255, green: 118/255, blue: 200/255, alpha: 1)\nlet lighter = purple.lighter\nRun Code Online (Sandbox Code Playgroud)\n
| 归档时间: |
|
| 查看次数: |
1631 次 |
| 最近记录: |