将CAGradientLayer混合用作阴影

Ash*_*row 13 core-animation objective-c calayer ios

我有一个CAGradientLayer我用作阴影.它从60%不透明度变为清晰,从左到右.在渐变的边缘,它似乎与其下面的图层混合并使该图层变亮:

请注意阴影下方照片的~1像素宽亮效果

在阴影的最末端有一个像素宽的"发光",它在那里消失得很清晰.它似乎使阴影背后的阴影照片更亮.这是一个特写:

在此输入图像描述

这是产生阴影的代码:

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;
Run Code Online (Sandbox Code Playgroud)

关于如何摆脱它的任何想法?

joe*_*ick 22

你的眼睛在欺骗你.渐变边缘的强度没有增加.您可以检查 - 我将图像缩小到云区域的1px高度并查看颜色值. 图像缩小到1px高度

然而,你看到一条亮线的原因是阴影看起来不像那样.您期望看到的透明度轮廓将更接近高斯而不是直线(这是线性渐变的作用).

我建议添加一些额外的点来缓和透明区域的渐变.也许是这样的

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];
Run Code Online (Sandbox Code Playgroud)

您可能需要增加渐变的大小以适应这种额外的混合.