Итак, я новичок в изучении Swift, и у меня возникают проблемы с удалением фона градиента кнопки, технически я могу «удалить» его, но он нестабилен и вылетает при многократном нажатии. Я предполагаю, что это как-то связано с тем, что подслой не был удален «безопасно», но я огляделся и просто не могу понять.
@IBAction func button(_ sender: UIButton) {
sender.setTitleColor(.systemBackground, for: .selected)
sender.isSelected = !sender.isSelected
if sender.isSelected {
sender.layer.borderWidth = 0
sender.applyGradient(colors: [ #colorLiteral(red: 0.5098039216, green: 0.8431372549, blue: 0.5254901961, alpha: 1) , #colorLiteral(red: 0.3058823529, green: 0.6941176471, blue: 0.3215686275, alpha: 1) ], radius: 10)
} else {
sender.layer.borderWidth = 1
sender.layer.sublayers!.remove(at: 1) // this not stable, cause crash if trigger repeatedly
}
}
extension UIButton {
func applyGradient(colors: [CGColor], radius: CGFloat = 0, startGradient: CGPoint = CGPoint(x: 0.5, y: 0.0), endGradient: CGPoint = CGPoint(x: 0.5, y: 1.0)) {
let gradientLayer = CAGradientLayer()
gradientLayer.cornerRadius = radius
gradientLayer.colors = colors
gradientLayer.startPoint = startGradient
gradientLayer.endPoint = endGradient
gradientLayer.frame = self.bounds
self.layer.insertSublayer(gradientLayer, at: 0)
}
}