Как добавить несколько цветов градиента в несколько представлений в контроллере представления

avatar
Enamul Haque
8 апреля 2018 в 10:57
824
2
0

Я использую приведенный ниже код для градиентного цвета. Но когда я использую этот код, он окрашивает весь контроллер представления. Он также охватывает другое содержимое, например текстовое поле, метку и т. д. Я хочу использовать несколько представлений с несколькими цветами градиента в контроллере представления. Предположим, у меня есть три представления в контроллере представления, и я хочу использовать три разных цвета градиента в трех разных представлениях. Содержимое, такое как метка и текстовое поле, будет отображаться в градиентных цветах.

Вот мой код:

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)

avatar
Ladislav
8 апреля 2018 в 16:49
0

Вы добавляете подслой 3 раза с

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

Просто

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)
}

В основном вы хотите иметь gradientLayer ниже всех других представлений, которые добавляются в контроллер представления, поэтому вы вставляете его как самый нижний слой, вставляя его в индекс 0.

avatar
KLD
8 апреля 2018 в 16:49
1

В вашем примере вы применяете градиент к self.view, который по сути является корневым представлением всего ViewController. Мало того, вы применяете один и тот же градиент к self.view несколько раз.

Вы хотите применять градиенты к каждому элементу отдельно, а не к самому self.view.

Предположим, что у вас есть UITextfield, затем просто примените градиент, как вы уже делали, но вместо этого примените его непосредственно к нужному объекту.

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

И так далее и тому подобное.

Примечание: Не забудьте применить разные градиенты к соответствующим представлениям, иначе все градиенты будут одинаковыми.