-1

Have ViewHelper class with gradient background

class ViewHelper: UIView{
class func setBackGroundColor(view: UIView){
    let startColor = UIColor(red:0.84, green:0.82, blue:0.80, alpha:1.0)
    let endColor = UIColor(red:0.19, green:0.26, blue:0.32, alpha:1.0)
    let newLayer = CAGradientLayer()
    newLayer.colors = [startColor.cgColor,endColor.cgColor]
    newLayer.frame = view.frame
    view.layer.addSublayer(newLayer)
}

and MainClass where i set it

class ViewController: UIViewController {
override func viewDidLoad() {
    super.viewDidLoad()
    ViewHelper.setBackGroundColor(view: self.view)
}

when I insert any view element it is not visible,just my gradient screen. enter image description here

rmaddy
  • 314,917
  • 42
  • 532
  • 579
  • you can subclass UIView and create a custom gradient view. check this https://stackoverflow.com/questions/24380535/how-to-apply-gradient-to-background-view-of-ios-swift-app/37243106?s=1|56.5473#37243106 – Leo Dabus Nov 08 '17 at 20:26

2 Answers2

1

You could simply change this:

let newLayer = CAGradientLayer()

to this:

let newLayer = CAGradientLayer()
newLayer.zPosition = -1

However, it would be better for your view to host the gradient layer directly as its layer (through its layerClass property).

matt
  • 515,959
  • 87
  • 875
  • 1,141
0

You are adding the layer newLayer on top

but what you should do is adding the layer as the last one as a bottom layer

insertSublayer(_ layer: CALayer, at: UInt32) should be helpful to you

A better way to do it might be:

class ViewController: UIViewController {

    let gradientLayer = CAGradientLayer()

    override func viewDidLoad() {
        super.viewDidLoad()

        let startColor = UIColor(red:0.84, green:0.82, blue:0.80, alpha:1.0)
        let endColor = UIColor(red:0.19, green:0.26, blue:0.32, alpha:1.0)

        gradientLayer.colors = [startColor.cgColor,endColor.cgColor]
        view.layer.insertSublayer(gradientLayer, at: 0)
    }

    override func viewDidLayoutSubviews() {
        super.viewDidLayoutSubviews()

        gradientLayer.frame = view.frame
    }
}
zombie
  • 5,069
  • 3
  • 25
  • 54