Нарисуйте градиент от прозрачного к белому над белым в iOS

У меня есть приложение для iOS с прокручиваемым текстом на главном экране. Я хочу, чтобы текст в нижней части экрана исчезал. Итак, я создаю собственное представление и делаю что-то вроде этого в drawRect:

CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
CGContextRef context = UIGraphicsGetCurrentContext();

CGFloat gradLocs[] = {0, 1};
CGColor *color1 = [UIColor clearColor].CGColor;
CGColor *color2 = [UIColor whiteColor].CGColor;
CFArrayRef arr = (CFArrayRef)@[(id)color1, (id)color2];
CGGradientRef grad = CGGradientCreateWithColors(colorSpace, arr, gradLocs);

CGContextSaveGState(context);
CGContextDrawLinearGradient(context, grad, CGPointMake(0, 0), CGPointMake(0, rect.size.height), 0);
CGContextRestoreGState(context);

По сути, нарисуйте линейный градиент от прозрачного к белому поверх вида. Я также пробовал делать это с помощью CAGradientLayer:

CAGradientLayer *layer = [CAGradientLayer layer];
layer.colors = @[(id)[UIColor clearColor].CGColor, (id)[UIColor whiteColor].CGColor];
layer.locations = @[@(0), @(1)];
layer.frame = CGRectMake(0, 0, self.frame.size.width, self.frame.size.height);
[self.layer insertSublayer:layer atIndex:0];

В любом случае, если это нарисовано поверх белого, я получу серый. PaintCode показывает то же самое:

Снимок экрана PaintCode

Почему это? Кажется, что градиент вообще не должен быть виден поверх белого.


person Tom Hamming    schedule 03.02.2015    source источник


Ответы (1)


+[UIColor clearColor] на самом деле прозрачный черный. Поскольку вам нужен прозрачный белый цвет, вы должны использовать:

color1 = [[UIColor whiteColor] colorWithAlphaComponent:0.0].CGColor;

Внимательно прочитав документацию до +[UIColor clearColor], там говорится, что он вернет цвет с оттенками серого и альфа-значениями 0.0. Таким образом, середина вашего градиента от белого к прозрачному - это [UIColor initWithWhite:0.5 alpha:0.5], то есть прозрачный серый цвет.

person Mats    schedule 03.02.2015
comment
Будьте здоровы!! - person Vojta; 27.04.2018