将CAGradientLayer混合用作阴影

时间:2011-11-01 20:53:13

标签: objective-c ios core-animation calayer

我有一个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;

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

1 个答案:

答案 0 :(得分:22)

你的眼睛在欺骗你。渐变边缘的强度没有增加。您可以检查 - 我将图像缩小到云区域的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];

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