我想繪製一個從白色到透明的漸變陰影。我正在使用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
在哪裏?