Подтвердить что ты не робот

Смешивание CAGradientLayer используется как тень

У меня есть CAGradientLayer, который я использую в качестве тени. Он исчезает с 60% непрозрачности, чтобы очистить, слева направо. На краю градиента он, кажется, смешивается со слоем под ним и осветляет этот слой:

Notice the ~1 pixel wide lightened effect on the photo beneath the shadow

В самом конце тени есть однопиксельное "свечение", где оно исчезло. Кажется, что фото за тенью легче в хвосте тени. Вот крупный план:

enter image description here

Это код, создающий эту тень:

CAGradientLayer *layer = [CAGradientLayer layer];
layer.frame = CGRectMake(sideBar.frame.size.width, 0, 7, sideBar.frame.size.height);
layer.colors = [NSArray arrayWithObjects:
                (id)[[[UIColor blackColor] colorWithAlphaComponent:0.6f] CGColor],
                (id)[[UIColor clearColor] CGColor],
                nil];
[layer setStartPoint:CGPointMake(0, 0.5)];
[layer setEndPoint:CGPointMake(1, 0.5)];
[sideBar.layer insertSublayer:layer atIndex:0];  
sideBar.layer.masksToBounds = NO;

Любые идеи о том, как избавиться от этого?

4b9b3361

Ответ 1

Ваши глаза обманывают вас. Там нет увеличения интенсивности на краю градиента. Вы можете проверить: я уменьшил изображение до высоты 1px в облачной области и посмотрел на значения цвета. image shrunk to 1px height

Однако причина, по которой вы видите яркую линию, заключается в том, что тени не выглядят так. Профиль прозрачности, который вы ожидаете увидеть, будет ближе к гауссовой, чем прямой (что и делает линейный градиент).

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

layer.colors = [NSArray arrayWithObjects:
                (id)[[[UIColor blackColor] colorWithAlphaComponent:0.6f] CGColor],
                (id)[[[UIColor blackColor] colorWithAlphaComponent:0.3f] CGColor],
                (id)[[[UIColor blackColor] colorWithAlphaComponent:0.1f] CGColor],
                (id)[[UIColor clearColor] CGColor],
                nil];

Возможно, вам придется увеличить размер градиента, чтобы разместить это дополнительное смешение.