0

I use the code below for gradient color. But when I use that code it colors the whole view controller. It also covers the other contents too like textfield, label, etc. I want to use multiple views with multiple gradient colors in a view controller. Suppose I have three views in a view controller and I want to use three different gradient colors in three different views. Content like label and textfield will appear on the gradient colors.

Here is my code:

func setBackground_view() {
    let gradientLayer = CAGradientLayer()
    let colorTop =  UIColor(red: 44/255.0, green: 156/255.0, blue: 56/255.0, alpha: 1.0).cgColor
    let colorBottom = UIColor(red: 155/255.0, green: 180/255.0, blue: 23/255.0, alpha: 1.0).cgColor

    gradientLayer.colors = [ colorTop, colorBottom]
    gradientLayer.startPoint = CGPoint(x: 1.0, y: 0.5)
    gradientLayer.endPoint = CGPoint(x: 0.0, y: 1.0)
    gradientLayer.frame = self.view.bounds
    self.view.layer.addSublayer(gradientLayer)
    self.view.layer.insertSublayer(gradientLayer, at: 0)
    view.layer.addSublayer(gradientLayer)
}

2 Answers 2

1

What you're doing in your example is applying the gradient to self.view which is essentially the root view of the whole ViewController. Not only that, but you're also applying the same gradient onto the self.view multiple times.

What you want is to apply gradients to each element individually, not the self.view itself.

Suppose you've got a UITextfield, then just apply the gradient as you already did, but instead, apply it directly onto the desired object.

textField.layer.insertSublayer(gradientLayer, at: 0)
anyOtherView.layer.insertSublayer(differentGradient, at: 0)

And so on and so forth.

Note: Remember to apply the different gradients to their appropriate views, otherwise all the gradients will be the same.

Sign up to request clarification or add additional context in comments.

Comments

0

You are adding the sublayer 3 times with

self.view.layer.addSublayer(gradientLayer)
self.view.layer.insertSublayer(gradientLayer, at: 0)
view.layer.addSublayer(gradientLayer)

Just do

func setBackground_view() {
    let gradientLayer = CAGradientLayer()
    let colorTop =  UIColor(red: 44/255.0, green: 156/255.0, blue: 56/255.0, alpha: 1.0).cgColor
    let colorBottom = UIColor(red: 155/255.0, green: 180/255.0, blue: 23/255.0, alpha: 1.0).cgColor

    gradientLayer.colors = [ colorTop, colorBottom]
    gradientLayer.startPoint = CGPoint(x: 1.0, y: 0.5)
    gradientLayer.endPoint = CGPoint(x: 0.0, y: 1.0)
    gradientLayer.frame = self.view.bounds
    view.layer.insertSublayer(gradientLayer, at: 0)
}

Basically you want to have the gradientLayer below all other views that are added in the view controller, that is why you insert it as the bottom most layer by inserting it at index 0.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.