从黑色到完全透明的快速渐变

Posted

技术标签:

【中文标题】从黑色到完全透明的快速渐变【英文标题】:Swift gradient from black to fully transparent 【发布时间】:2018-05-01 00:28:23 【问题描述】:

我正在尝试使用 swift 应用 CAGradientLayer,我希望它从黑色渐变为透明。

我认为用alpha: 0 放置任何颜色都会呈现相同的“透明”颜色。事实并非如此。白色配alpha: 0 还是有点白,红色配alpha: 0 还是有点红……

我不想要任何色调,只想要透明。黑色变黑到没有颜色的地步,例如,您可以完全看到它下面的视图。

gradientLayer.colors = [UIColor(hex: 0x000000, alpha: 0.4).cgColor,
                        UIColor(hex: 0x6D6D6D, alpha: 0.3).cgColor,
                        UIColor.white.withAlphaComponent(0.0).cgColor]
gradientLayer.locations = [0.0, 0.3, 1.0]

如果我将图层应用到灰色图片上,很容易看出它不是透明的而是白色的:

编辑1:

gradientLayer.frame = self.gradientView.bounds
gradientLayer.masksToBounds = true
gradientLayer.colors = [UIColor.black.withAlphaComponent(1.0).cgColor, UIColor.black.withAlphaComponent(0.0).cgColor]
gradientLayer.locations = [0.0, 1.0]
gradientLayer.startPoint = CGPoint(x: 0.0, y: 0.0)
gradientLayer.endPoint = CGPoint(x: 0.0, y: 1.0)
self.gradientView.layer.addSublayer(gradientLayer)

输出:

【问题讨论】:

你试过用 UIColor.clear.cgColor 代替 UIColor.white.withAlphaComponent(0.0).cgColor 吗? @JakeG 是的,我做到了,而不是白色,而是黑色...... 你需要透明所以为什么不使用 UIColor.clear ? @iosGeek 我刚才说过,我试过了,它是黑色的 那是因为UIColor.clear 实际上是一种黑色,其 alpha 值为 0。当我尝试从白色渐变为清晰时,对我有用的是从 (r: 255, g: 255, b: 255, a: 1) 渐变到 (r: 255, g: 255, b: 255, a: 0.01)(所以仍然是白色的,但带有一个高于 0 的微小 alpha 值。对于黑色做 (r: 0, g: 0, b: 0, a: 1)(r: 0, g: 0, b: 0, a: 0.01) 【参考方案1】:

你可以试试这个:

    gradientLayer.colors = [UIColor.black.withAlphaComponent(1.0).cgColor,
                            UIColor.black.withAlphaComponent(0.0).cgColor]
    //gradientLayer.locations = [0.0, 1.0]
    gradientLayer.frame = myView.bound
    gradientLayer.startPoint = CGPoint(x: 1.0, y: 0.0)
    gradientLayer.endPoint = CGPoint(x: 1.0, y: 1.0)
    myView.layer.insertSublayer(gradientLayer, at: 0)

它在我的情况下有效。

【讨论】:

这很奇怪。我试过了,黑色仍然可见并且结束了。它不是平滑地变成透明的,而是停止了一条“线”。 我已经编辑了我的ans。尝试添加startPointendPoint gradientLayer.frame = myView.frame 你需要设置 myView.bound 才能工作

以上是关于从黑色到完全透明的快速渐变的主要内容,如果未能解决你的问题,请参考以下文章

如何将一块div为黑色背景 渐变成上黑下部透明的?

ImageView 渐变行为异常

cdr9中互动式透明工具渐变怎么让中间颜色轻两边重

如何为 UILabel 设置黑色透明? [复制]

在纯色背景上添加透明渐变

css如何实现图片的透明渐变?