Ash*_*row 13 core-animation objective-c calayer ios
我有一个CAGradientLayer我用作阴影.它从60%不透明度变为清晰,从左到右.在渐变的边缘,它似乎与其下面的图层混合并使该图层变亮:

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

这是产生阴影的代码:
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高度并查看颜色值.

然而,你看到一条亮线的原因是阴影看起来不像那样.您期望看到的透明度轮廓将更接近高斯而不是直线(这是线性渐变的作用).
我建议添加一些额外的点来缓和透明区域的渐变.也许是这样的
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)
您可能需要增加渐变的大小以适应这种额外的混合.