径向渐变使用意外的灰色

时间:2018-03-07 22:17:23

标签: ios core-graphics radial-gradients

TL; DR

有谁知道如何在径向渐变中平滑从红色到白色的渐变过渡?因为我的渐变中有一种难看的灰色。

详细信息:

我在draw rect

中创建了一个带有以下内容的自定义UIView
override func draw(_ rect: CGRect) {

    let colors = [UIColor.red.cgColor, UIColor.clear.cgColor] as CFArray
    let divisor: CGFloat = 3
    let endRadius = sqrt(pow(frame.width/divisor, 2) + pow(frame.height/divisor, 2))
    let center = CGPoint(x: bounds.midX, y: bounds.midY)
    let gradient = CGGradient(colorsSpace: nil, colors: colors, locations: nil)

    let context = UIGraphicsGetCurrentContext()
    context?.saveGState()
    context?.drawRadialGradient(gradient!,
                                startCenter: center,
                                startRadius: 0.0,
                                endCenter: center,
                                endRadius: endRadius,
                                options: .drawsBeforeStartLocation)

    context?.restoreGState()
}

我将自定义视图的颜色设置为红色,并将视图添加到viewcontroller的视图中,该视图具有白色背景。

enter image description here

我希望渐变从红色变为白色但似乎从红色变为灰色。我尝试将渐变阵列中的第二种颜色更改为白色,尽管它看起来稍微好一点,但灰度仍然存在。

enter image description here

1 个答案:

答案 0 :(得分:2)

在透明渐变上使用清晰的颜色时请记住,通过将黑色应用于alpha会生成清晰的颜色,这也就是为什么在您的情况下获得灰色的原因。

要使用UIColor.clear.cgColorcolors数组更改UIColor.white.withAlphaComponent(0.0).cgColor代码,以解决此问题。这样你就可以得到你期望的渐变。