У меня есть приложение для 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 показывает то же самое:
Почему это? Кажется, что градиент вообще не должен быть виден поверх белого.