【发布时间】:2017-05-05 10:46:28
【问题描述】:
让我们说我有三个按钮,功能是选择按钮时,我不想为该按钮添加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 ,因为我试图删除所有 首先子层,甚至尝试删除 view.isHidden 块中 0 索引处的子层。 尽管它也不起作用。
功能代码将针对 UIButton 的不同对象执行 3 次
如何解决这个问题?
【问题讨论】:
标签: ios swift cagradientlayer