Я пытаюсь нарисовать круг, затененный градиентом от белого до прозрачного. Я использую Core Graphics.Где находится CGColorSpace для RGBA?
Вот что у меня есть, который рисует градиент от белого к черному:
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()
).
Возможно, исправление изменит указанное цветовое пространство на одно с альфа-компонентом, таким как RGBA. Однако такие цветовые пространства не существуют! Есть только CGColorSpaceCreateDeviceRGB
, CGColorSpaceCreateDeviceCMYK
и CGColorSpaceCreateDeviceGray
.
Но не имеет смысла, чтобы не было доступных цветовых пространств с альфа-компонентом. В документации явно описывается поддержка alpha в градиентах. The documentation for CGGradient.init
говорит:
Например, если цветовое пространство является RGBA цветового пространства, и вы хотите использовать два цвета в градиенте (один для исходного местоположения, а другой для концовки место), то вам необходимо предоставить 8 значений в
components
-red, зеленый, синий и альфа-значения для первого цвета, за которым следуют красные, зеленые, синие и альфа-значения для второго цвета.
Эта кодировка RGBA имеет смысл, но невозможно сказать Core Graphics, что я использую такую кодировку RGBA, потому что нет цветового пространства RGBA!
Где CGColorSpace
для RGBA?