我已经能够将想要的渐变应用于UICollectionViewCell的backgroundView。但是每次我重新加载单元格时,它都会再次应用我的渐变,并累积所有渐变。
首先这里是我的渐变方法:
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()
}
渐变动画已正确完成,应用于整个视图,但是当重新加载单元格时,它将在前一个渐变之上应用新的渐变,直到我再也看不到我的单元格为止(在这种情况下,此处太白了) )。
关于如何解决此问题的任何想法?
答案 0 :(得分:1)
您可以尝试
override func layoutSubviews() {
super.layoutSubviews()
if !(self.layer.sublayers?.first is CAGradientLayer) {
CATransaction.begin()
CATransaction.setDisableActions(true)
UIUtils.setGradientWhite(uiView: self)
CATransaction.commit()
}
}