gpt4 book ai didi

ios - 三个按钮同时添加/删除GradientLayer

转载 作者:行者123 更新时间:2023-11-28 15:40:11 25 4
gpt4 key购买 nike

说我有三个按钮,功能是选择按钮时,我不想为该按钮添加mygradientlayer,并且想要其他两个按钮。

为了添加和删除 GradientLayer,我为 UIView 创建了一个扩展,如下所示:

extension UIView {

private var gradientLayer : CAGradientLayer {

let gradientLayer = CAGradientLayer()
gradientLayer.frame = self.bounds
gradientLayer.colors = arrButtonColors.map({$0.cgColor})
return gradientLayer
}

open func applyGradientColor() {
self.layer.insertSublayer(gradientLayer, at: 0)
}

open func removeGradientLayer() {

gradientLayer.removeFromSuperlayer() --// this does't remove gradientLayer at all

self.layer.sublayers?.removeAll() --// this will remove all the layer include UILabelLayer , that doesn't i want

self.layer.sublayers = nil --// same effect as above(2nd condition)

}

}

我在 ViewController 中的功能代码:

if view.isHidden {
btn.applyGradientColor()
} else {
btn.removeGradientLayer()
}

我知道如果 btn(Button) 没有任何层(不包括 UILabelLayer)那么它将 添加 GradientLayer 否则不添加,因为我试图删除所有 sublayer 首先,甚至试图在 view.isHidden block 中删除索引为 0 的子层。尽管它也不起作用。

功能代码将针对 UIButton 的不同对象执行三次

如何解决这个问题?

最佳答案

您没有引用之前添加的 gradientLayer。你必须保留它。一种方法是对其进行子类化并在其中保留变量,或者您也可以使用 objc_setAssociatedObject 在运行时通过扩展保留它。

以下是如何执行此操作的示例:

private var key = "gradientLayerKey"
extension UIView {
private var gradientLayer: CAGradientLayer? {
get {
return objc_getAssociatedObject(self, &key) as? CAGradientLayer
}

set {
objc_setAssociatedObject(self, &key, newValue, .OBJC_ASSOCIATION_RETAIN)
}
}

private var gradientLayerInstance: CAGradientLayer {
let newGradientLayer = CAGradientLayer()
newGradientLayer.frame = self.bounds
newGradientLayer.colors = arrButtonColors.map { $0.cgColor }
return newGradientLayer
}

open func applyGradientColor() {
gradientLayer?.removeFromSuperLayer()
// next line sets gradientLayer and retains it.
gradientLayer = gradientLayerInstance
self.layer.insertSublayer(gradientLayer, at: 0)
}

open func removeGradientLayer() {
gradientLayer?.removeFromSuperlayer()
}
}

关于ios - 三个按钮同时添加/删除GradientLayer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43802983/

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