正确删除带有渐变的图层

Posted

技术标签:

【中文标题】正确删除带有渐变的图层【英文标题】:Deleting layers with gradient properly 【发布时间】:2017-06-07 20:45:25 【问题描述】:

我有 UICollectionViewCell 和 UIView 称为 gradientView 用作标签的背景。

这个 UIView 需要有渐变 - 它在单元格顶部是浅色且几乎透明的,在单元格底部会变得稍暗(简单的线性渐变)。

所以我创建了一个名为 addGradient 的函数,它接受 UIView 并向其添加带有渐变的图层。

  func addGradient(view : UIView)

    view.backgroundColor = .clear

    let color1 = somecolor1.cgColor
    let color2 = somecolor2.cgColor

    let gradient:CAGradientLayer = CAGradientLayer()
        gradient.frame.size = view.frame.size
        gradient.colors = [color1, color2]

    view.layer.addSublayer(gradient) 

在 cellForItemAt 内部,我调用 addGradient(cell.gradientView) 并显示渐变。但我有两个问题:

1) 每个单元格变得越来越暗 - 似乎层层叠加在一起,我不想要它

2) 有时这种渐变会稍微错位 - 我也认为这是因为我没有正确删除这些图层

那么我应该如何以及在何处清除子层,也许我在 cellForItemAt 中添加此渐变的方法不正确?

【问题讨论】:

【参考方案1】:

只是猜测数字 1 而没有看到更多代码:将框架更改为边界

 func addGradient(view : UIView)

    view.backgroundColor = .clear

    let color1 = somecolor1.cgColor
    let color2 = somecolor2.cgColor

    let gradient:CAGradientLayer = CAGradientLayer()
        gradient.frame.size = view.bounds.size
        gradient.colors = [color1, color2]

    view.layer.addSublayer(gradient) 

【讨论】:

以上是关于正确删除带有渐变的图层的主要内容,如果未能解决你的问题,请参考以下文章

canvas怎么画一个渐变的圆角边框,填充的也行

UITableViewCell 渐变图层覆盖删除按钮

带有渐变的 UIProgressView

iOS 烟花撒花效果,图层渐变,图层倒影特效。CAEmitterLayer粒子发射器

iOS 绘制颜色渐变圆环 --- 值得一看

ps中间翻页翻页左右两个图片颜色不一样的那种效果图怎么制作?