How to Apply Gradient to background view of iOS Swift App How to Apply Gradient to background view of iOS Swift App ios ios

How to Apply Gradient to background view of iOS Swift App


Xcode 11 • Swift 5.1


You can design your own Gradient View as follow:

@IBDesignablepublic class Gradient: UIView {    @IBInspectable var startColor:   UIColor = .black { didSet { updateColors() }}    @IBInspectable var endColor:     UIColor = .white { didSet { updateColors() }}    @IBInspectable var startLocation: Double =   0.05 { didSet { updateLocations() }}    @IBInspectable var endLocation:   Double =   0.95 { didSet { updateLocations() }}    @IBInspectable var horizontalMode:  Bool =  false { didSet { updatePoints() }}    @IBInspectable var diagonalMode:    Bool =  false { didSet { updatePoints() }}    override public class var layerClass: AnyClass { CAGradientLayer.self }    var gradientLayer: CAGradientLayer { layer as! CAGradientLayer }    func updatePoints() {        if horizontalMode {            gradientLayer.startPoint = diagonalMode ? .init(x: 1, y: 0) : .init(x: 0, y: 0.5)            gradientLayer.endPoint   = diagonalMode ? .init(x: 0, y: 1) : .init(x: 1, y: 0.5)        } else {            gradientLayer.startPoint = diagonalMode ? .init(x: 0, y: 0) : .init(x: 0.5, y: 0)            gradientLayer.endPoint   = diagonalMode ? .init(x: 1, y: 1) : .init(x: 0.5, y: 1)        }    }    func updateLocations() {        gradientLayer.locations = [startLocation as NSNumber, endLocation as NSNumber]    }    func updateColors() {        gradientLayer.colors = [startColor.cgColor, endColor.cgColor]    }    override public func traitCollectionDidChange(_ previousTraitCollection: UITraitCollection?) {        super.traitCollectionDidChange(previousTraitCollection)        updatePoints()        updateLocations()        updateColors()    }}

enter image description here


The Colors you're providing to gradient must be of type CGColor. So set your array of CGColor to gl.colors.

The correct code is :

class Colors {    var gl:CAGradientLayer!    init() {        let colorTop = UIColor(red: 192.0 / 255.0, green: 38.0 / 255.0, blue: 42.0 / 255.0, alpha: 1.0).cgColor        let colorBottom = UIColor(red: 35.0 / 255.0, green: 2.0 / 255.0, blue: 2.0 / 255.0, alpha: 1.0).cgColor        self.gl = CAGradientLayer()        self.gl.colors = [colorTop, colorBottom]        self.gl.locations = [0.0, 1.0]    }}


Just modifying the above mentioned answer.

enter image description here

func setGradientBackground() {    let colorTop =  UIColor(red: 255.0/255.0, green: 149.0/255.0, blue: 0.0/255.0, alpha: 1.0).cgColor    let colorBottom = UIColor(red: 255.0/255.0, green: 94.0/255.0, blue: 58.0/255.0, alpha: 1.0).cgColor                    let gradientLayer = CAGradientLayer()    gradientLayer.colors = [colorTop, colorBottom]    gradientLayer.locations = [0.0, 1.0]    gradientLayer.frame = self.view.bounds                self.view.layer.insertSublayer(gradientLayer, at:0)}

Then call this method within viewWillAppear

override func viewWillAppear(_ animated: Bool) {    setGradientBackground()    super.viewWillAppear(animated)}

enter image description here