【问题标题】:Blending CAGradientLayer used as shadow混合 CAGradientLayer 用作阴影
【发布时间】:2011-11-01 20:53:12
【问题描述】:

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

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

【问题讨论】:

    标签: objective-c ios core-animation calayer


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-10
      • 1970-01-01
      相关资源
      最近更新 更多