如何在 iOS 中创建从全色到不透明度 0 的渐变?

How to create a gradient which goes from full color to opacity of 0 in iOS?

我有 looked here,但根据他们的示例,我尝试并在下面显示,但没有奏效。它无法完成以下任务。我希望创建一个从全黑到全黑的渐变,不透明度为 0:

@IBDesignable
final class GradientView: UIView {
    @IBInspectable var startColor: UIColor = UIColor.clear
    @IBInspectable var endColor: UIColor = UIColor.clear

    override func draw(_ rect: CGRect) {
        let gradient: CAGradientLayer = CAGradientLayer()
//        gradient.frame = bounds
        gradient.frame = CGRect(x: CGFloat(0),
                                y: CGFloat(0),
                                width: superview!.frame.size.width,
                                height: superview!.frame.size.height)
        gradient.colors = [startColor.cgColor, endColor.cgColor]
        gradient.zPosition = -1
        layer.addSublayer(gradient)
    }
}

我怎样才能做到这一点,最好是在界面生成器中?

以下是我的实现

@IBDesignable
final class GradientView: UIView {
    override func draw(_ rect: CGRect) { 
        //// General Declarations
        let context = UIGraphicsGetCurrentContext()!


        //// Gradient Declarations
        let gradient = CGGradient(colorsSpace: nil, colors: [UIColor.white.cgColor, 
     UIColor.white.blended(withFraction: 0.5, of: UIColor.black).cgColor, 
    UIColor.black.cgColor] as CFArray, locations: [0, 0.51, 0.89])!

    //// Rectangle Drawing
    let rectangleRect = CGRect(x: frame.minX + 11, y: frame.minY + 8, width: 85, height: 54)
    let rectanglePath = UIBezierPath(rect: rectangleRect)
    context.saveGState()
    rectanglePath.addClip()
    context.drawLinearGradient(gradient,
        start: CGPoint(x: rectangleRect.midX, y: rectangleRect.minY),
        end: CGPoint(x: rectangleRect.midX, y: rectangleRect.maxY),
        options: [])
    context.restoreGState()
    }
}

我最后做了以下事情:

  private func setupGradient() { 

    //Below for container
    gradientViewContainer.frame = CGRect(x: 0, y: 152, width: 117, height: 38) 
    gradientViewContainer.isHidden = true

    //Below for actual gradient
    gradientLayer.frame = CGRect(x: 0, y: 152, width: gradientViewContainer.frame.width, height: gradientViewContainer.frame.height)

    gradientLayer.startPoint = CGPoint(x: 1.0, y: 0.0)
    gradientLayer.endPoint = CGPoint(x: 1.0, y: 1.0)

    gradientLayer.colors = [UIColor.black.withAlphaComponent(0.0).cgColor, UIColor.black.withAlphaComponent(0.7).cgColor, UIColor.black.withAlphaComponent(0.7).cgColor,  UIColor.black.withAlphaComponent(1.0).cgColor]
    gradientLayer.locations = [0.0, 1.0]

    gradientViewContainer.layer.insertSublayer(gradientLayer, at: 0)
    gradientViewContainer.alpha = 0.65

}

然后在viewDidLoad:

    setupGradient()
    myView.layer.addSublayer(gradientLayer)