CAGradientLayer не заполняет ширину - PullRequest
0 голосов
/ 23 июня 2018

Я относительно новичок в Swift.Я просто бездельничаю, пытаясь спроектировать приложение для такси.

Я обнаружил CGGradientLayer и подумал, что это добавит хороший эффект в верхнюю панель приложения.

Я добавилэто и по какой-то причине он не полностью растягивается до ширины просмотров.

Это мой подкласс:

import UIKit

class GradientView: UIView {

    let gradient = CAGradientLayer()

    override func awakeFromNib() {
        setupGradientView()
    }

    func setupGradientView() {
        gradient.frame = self.frame
        gradient.colors = [UIColor.white.cgColor, UIColor.init(white: 1.0, alpha: 0.0).cgColor]
        gradient.startPoint = CGPoint.zero
        gradient.endPoint = CGPoint(x: 0, y: 1)
        gradient.locations = [0.9, 1.0]
        self.layer.addSublayer(gradient)
    }
}

И это результат.

Зеленый фонфактически ширина UIView, к которой применяется подкласс.

enter image description here

1 Ответ

0 голосов
/ 23 июня 2018

Вы устанавливаете frame градиента слишком рано. Вы должны установить его в override из layoutSubviews:

override func layoutSubviews() {
    super.layoutSubviews()
    gradient.frame = self.bounds
}

Примечания:

  • Вы должны установить градиентную рамку на self.bounds. Это система координат, используемая внутри представления. Градиент размещается относительно GradientView и не изменяется, если GradientView находится в другом месте на экране (потому что bounds в этом случае не меняется, а frame меняется).
  • В то время, когда ваше представление впервые создается, Авторазметка не установило размер вашего представления для вашего текущего устройства (или ориентации). Установив frame в layoutSubviews, вы всегда получите самое последнее значение размера представления.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...