正确删除带有渐变的图层
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)
【讨论】:
以上是关于正确删除带有渐变的图层的主要内容,如果未能解决你的问题,请参考以下文章