swift - 从 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
}
}
我希望在激活禁用案例时删除渐变层
解决方案
您可以name
在创建和使用图层时设置渐变图层filter
,remove
如下parent
所示,
let buttonGradient = CAGradientLayer()
buttonGradient.name = "Gradient"
// Removing
self.layer.sublayers?.first(where: { $0.name == "Gradient"})?.removeFromSuperlayer()
推荐阅读
- unity3d - 如何在 URP 中勾勒(剪影)3D 模型?
- python - 如何在kivy python中让任何应用程序在后台运行
- objective-c - 在 Objective-C 项目中的 Swift 文件中使用 Objective-C Singleton
- python - 使用 spaCy 过滤具有超过 1 个标记的专有名词
- python - 检查网站地址是否有效的程序
- c++ - 使用不同目录时在 VSCode 中调试 C/C++
- excel - 如果特定单元格包含值,则返回单元格的值
- c++ - 如何在为 movesense 构建模拟器时删除此 Cmake 错误
- python - 强制子类实现父方法pylance
- python - 有没有办法缩短多个 if 语句?