2011-11-01 24 views
13

我有一个CAGradientLayer用作阴影。它从60%的不透明度渐渐消失,从左到右。在梯度的边缘,它似乎与它下面的层被混合和减轻该层:用作阴影的混合CAGradientLayer

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; 

如何摆脱任何想法?

回答

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]; 

您可能需要增加渐变的大小来容纳这种额外的混合。