我想绘制一个从白色到透明的渐变阴影。我正在使用Core Graphics。RGBC的CGColorSpace在哪里?
这里是我有画从白到黑的渐变:
let colorSpace = CGColorSpaceCreateDeviceRGB();
let colors = [UIColor.white.cgColor, UIColor.black.cgColor] as CFArray;
let locations : [CGFloat] = [0.0, 1.0];
let glowGradient : CGGradient = CGGradient.init(colorsSpace: colorSpace, colors: colors, locations: locations)!;
let ctx = UIGraphicsGetCurrentContext()!;
ctx.drawRadialGradient(glowGradient, startCenter: rectCenter, startRadius: 0, endCenter: rectCenter, endRadius: imageWidthPts/2, options: []);
不过,我并不想画白到黑;我想画白到透明。
为此,我首先尝试将最终颜色更改为UIColor.white.cgColor.copy(alpha: 0.0)
(即透明白色)。然而,这种失败:
fatal error: unexpectedly found nil while unwrapping an Optional value
我认为这个错误是由于颜色是指定的RGB色彩空间(CGColorSpaceCreateDeviceRGB()
)之外。
此修复程序似乎是将指定的色彩空间更改为具有alpha分量(例如RGBA)的色彩空间。但是,这样的色彩空间似乎并不存在!只有CGColorSpaceCreateDeviceRGB
,CGColorSpaceCreateDeviceCMYK
和CGColorSpaceCreateDeviceGray
。
但是没有可用的颜色空间与alpha组件没有意义。该文档明确描述了对渐变中的alpha的支持。 The documentation for CGGradient.init
说:
例如,如果将色彩空间是一个RGBA色彩空间,并且要在梯度(一个用于起始位置,另一个是结束位置)使用两种颜色,那么你需要提供第一种颜色的红色,绿色,蓝色和alpha值为
components
中的8个值,然后是第二种颜色的红色,绿色,蓝色和alpha值。
这种RGBA编码非常有意义,但不可能告诉Core Graphics我正在使用这样的RGBA编码,因为没有RGBA色彩空间!
RGBA的CGColorSpace
在哪里?