CGRect не появляется с подслоем градиента - PullRequest
0 голосов
/ 29 июня 2019

CGRect не появляется одновременно с подслоем градиента, это один или другой

Отрисовка только градиентного слоя или только прямоугольника работает нормально.

    guard let ctx = UIGraphicsGetCurrentContext() else { fatalError() }
    ctx.setFillColor(red: 1, green: 0.5, blue: 0.5, alpha: 1)
    let segment1 = CGRect(x: 20, y: 110, width: 30, height: 10)
    ctx.fill(segment1)

    let gradient = CAGradientLayer()
    gradient.frame = bounds
    gradient.colors = [UIColor.init(displayP3Red: 0.29, green: 0.56, blue: 1.0, alpha: 1).cgColor, UIColor.init(displayP3Red: 0.23, green: 0.19, blue: 0.8, alpha: 1).cgColor]
    layer.insertSublayer(gradient, at: 0)

Я ожидал, что они появятся в правильном порядке

1 Ответ

1 голос
/ 29 июня 2019

Используйте: gradient.render(in: ctx) вместо layer.insertSublayer(gradient, at: 0 и нарисуйте segement1 после этого: (Предполагая, что вы делаете это в пользовательском классе представления)

class customView: UIView {
    override func draw(_ rect: CGRect) {
        guard let ctx = UIGraphicsGetCurrentContext() else { fatalError() }

        let gradient = CAGradientLayer()
        gradient.frame = bounds
        gradient.colors = [UIColor.init(displayP3Red: 0.29, green: 0.56, blue: 1.0, alpha: 1).cgColor, UIColor.init(displayP3Red: 0.23, green: 0.19, blue: 0.8, alpha: 1).cgColor]
        gradient.render(in: ctx)

        ctx.setFillColor(red: 1, green: 0.5, blue: 0.5, alpha: 1)
        let segment1 = CGRect(x: 20, y: 110, width: 30, height: 10)
        ctx.fill(segment1)
    }
}

Таким образом, вы не используетеCGGraphicsContext в дополнение к CALayer, вы просто используете CGGraphicsContext, потому что ваш слой визуализируется с использованием ctx

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...