Мне удалось применить желаемый градиент к backgroundView моего UICollectionViewCell.Но каждый раз, когда я перезагружаю ячейку, она снова применяет мой градиент, накапливая весь градиент.
Прежде всего, вот мой метод для градиента:
static func setGradientWhite(uiView: UIView) {
let colorBottomWhite = UIColor(red:1.00, green:1.00, blue:1.00, alpha:0.30).cgColor
let colorTopWhite = UIColor(red:1.00, green:1.00, blue:1.00, alpha:0).cgColor
let gradientLayer = CAGradientLayer()
gradientLayer.colors = [ colorTopWhite, colorBottomWhite]
gradientLayer.locations = [ 0.0, 1.0]
gradientLayer.frame = uiView.bounds
uiView.layer.insertSublayer(gradientLayer, at: 0)
}
Я знаю, что могу сделатьэто более общий способ, и измените способ обработки цветов, но это не главное, сейчас это для целей тестирования.
Я пытался назвать это так:
override func awakeFromNib() {
super.awakeFromNib()
UIUtils.setGradientWhite(uiView: self)
}
Градиенты не накапливаются таким образом, в awakeFromNib, НО, анимация не закончена, и у меня есть только половина моей ячейки с примененным градиентом.
И если я делаю это в этом методе:
override func layoutSubviews() {
super.layoutSubviews()
CATransaction.begin()
CATransaction.setDisableActions(true)
UIUtils.setGradientWhite(uiView: self)
CATransaction.commit()
}
Градиентная анимация правильно завершена, применяя ко всему виду, но когда ячейка перезагружается, она применяет новый градиент поверх предыдущего, пока я больше не вижу свою ячейку (в данном случае слишком много белого здесь).
Есть идеи, как решить эту проблему?