gpt4 book ai didi

ios - removeFromSuperLayer 有时不适用于 UICollectionViewCell iOS Swift 上的子 UIView

转载 作者:搜寻专家 更新时间:2023-11-01 07:17:14 25 4
gpt4 key购买 nike

对于 Swift 中的 iOS 应用程序,我使用扩展方法向自定义 UICollectionViewCell 子类中的 UIView 添加渐变层。

   extension UIView {

func addGradientLayer() {
let color1 = Constants.Colors.gradientStart
let color2 = Constants.Colors.gradientEnd
let gradientLayer = CAGradientLayer()
gradientLayer.name = Constants.gradientLayerName
gradientLayer.frame = self.bounds
gradientLayer.colors = [color1.cgColor, color2.cgColor]
self.layer.insertSublayer(gradientLayer, at: 0)
}
}

我的 UICollectionViewCell 子类有两种状态,有或没有渐变层。

    if true { // bool statement

cell.listeningView.addGradientLayer()

} else {

if let layers = cell.listeningView.layer.sublayers {

for (index, layer) in layers.enumerated() {

if layer.name == Constants.gradientLayerName {

cell.listeningView.layer.sublayers?[index].removeFromSuperlayer()
break
}
}
}
cell.listeningView.backgroundColor = Constants.Colors.newsFeedItemNotInFocus
}

有时,当我的单元格出队时,尽管调用了 removeFromSuperLayer 方法,但无法删除 gradientLayer。有谁知道为什么会这样?以及如何确保该层被移除?

最佳答案

唯一的原因是您不止一次地添加了这个子图层。尝试移除循环内的 break 并再次测试。

快速解决方案:在再次添加之前删除图层。

if let layers = cell.listeningView.layer.sublayers {

for (index, layer) in layers.enumerated() {

if layer.name == Constants.gradientLayerName {

cell.listeningView.layer.sublayers?[index].removeFromSuperlayer()
//break with or without
}
}
}
cell.listeningView.addGradientLayer()

关于ios - removeFromSuperLayer 有时不适用于 UICollectionViewCell iOS Swift 上的子 UIView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41511752/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com