首页 > 解决方案 > 从 UIView 中删除特定子层

问题描述

我正在尝试从UIButton视图中删除特定的子层

我试过self.view.layer.sublayer.removeall()了,但它使应用程序崩溃

func setViewState(viewState: StartButton.ViewState) {

    switch (viewState) {

    case .disabled:
        self.backgroundColor = UIColor.clear
        self.layer.borderColor = StartButton.disabledButtonColor?.cgColor
        self.setTitleColor(StartButton.disabledButtonColor, for: .normal)

        self.isEnabled = false

    case .enabled:
        self.layer.borderWidth = 0
        self.setTitleColor(.black, for: .normal)
        let buttonGradient = CAGradientLayer()
        buttonGradient.frame = CGRect(x: 0, y: 0, width: 311, height: 80)
        buttonGradient.colors = [
            UIColor.white.cgColor,
            UIColor(red:0.94, green:0.94, blue:0.96, alpha:1).cgColor
        ]

        buttonGradient.locations = [0, 1]
        buttonGradient.startPoint = CGPoint(x: 0.5, y: 0)
        buttonGradient.endPoint = CGPoint(x: 0.5, y: 1)
        self.layer.insertSublayer(buttonGradient, at: 0)

        self.layer.shadowOffset = CGSize(width: 0, height: 12)
        self.layer.shadowColor = UIColor(red:0, green:0, blue:0, alpha:0.15).cgColor
        self.layer.shadowOpacity = 1
        self.layer.shadowRadius = 34

        self.layer.masksToBounds = true
        self.isEnabled = true
    }
}

我希望在激活禁用案例时删除渐变层

标签: swiftuser-interfaceuikitswift5

解决方案


您可以name在创建和使用图层时设置渐变图层filterremove如下parent所示,

let buttonGradient = CAGradientLayer()
buttonGradient.name = "Gradient"

// Removing
self.layer.sublayers?.first(where: { $0.name == "Gradient"})?.removeFromSuperlayer()

推荐阅读