UIKit - 为按钮添加图层效果删除图像

时间:2021-06-20 16:41:47

标签: ios swift

我有一个使用 UIButton 创建的“假”复选框,并且:

var mCheckState: Bool = false {
    didSet {
        if mCheckState == true {
            self.setImage(checkedImage, for: UIControl.State.normal)
        } else {
            self.setImage(uncheckedImage, for: UIControl.State.normal)
        }
    }
}

但是当我创建此图层样式以添加阴影/高光边缘时:

contentHorizontalAlignment = .left;
contentEdgeInsets = UIEdgeInsets(top: 0, left: 10, bottom: 0, right: 0);
setTitleColor(.black, for: UIControl.State.normal)
setTitleColor(UIColor(red: 0.85, green: 0.70, blue: 0.65, alpha: 1.0), for: UIControl.State.highlighted)

layer.backgroundColor = globalColorCG_white_background
layer.shadowColor = CGColor(gray: 1.0, alpha: 1.0)
layer.shadowOpacity = 0.8
layer.shadowRadius = globalButtonRadiusShadow * 0.75
layer.cornerRadius = globalButtonRadiusShadow
layer.shadowOffset = CGSize(width: -6.0,height: -8.0)

layer2 = CALayer(layer: layer)
layer2!.backgroundColor = globalColorCG_white_background
layer2!.shadowColor = CGColor(gray: 0.0, alpha: 1.0)
layer2!.shadowOpacity = 0.1
layer2!.shadowRadius = globalButtonRadiusShadow * 0.5
layer2!.cornerRadius = globalButtonRadiusShadow
layer2!.shadowOffset = CGSize(width: 6.0, height: 8.0)
layer2!.frame = layer.bounds
layer.insertSublayer(layer2!, at: 0)

showsTouchWhenHighlighted = true

...图像不再呈现。我应该添加/修复什么才能再次渲染图像? :-)

信息的额外代码:

    let checkedImage = UIImage(systemName: "checkmark.square")! as UIImage
    let uncheckedImage = UIImage(systemName: "square")! as UIImage
    var mIsCheckBox = false
    var mCheckState: Bool = false {
        didSet {
            if mCheckState == true {
                self.setImage(checkedImage, for: UIControl.State.normal)
                //self.bringSubviewToFront(checkedImage)

            } else {
                self.setImage(uncheckedImage, for: UIControl.State.normal)
                //self.bringSubviewToFront(uncheckedImage)

            }
        }
    }

2 个答案:

答案 0 :(得分:0)

你可以把你的形象放在前面

class ButtonSubclass: UIButton {
    override func awakeFromNib() {
        super.awakeFromNib()
        /**
         Set other button property and layers.
         */
        
        if let imgView = imageView {
            self.bringSubviewToFront(imgView)
        }
    }
}

答案 1 :(得分:0)

您需要在按钮的 ImageView 图层下方添加您的 layer2

所以改变这一行:

layer.insertSublayer(layer2!, at: 0)

为此:

layer.insertSublayer(layer2!, below: imageView!.layer)

您可能想要检查按钮的 imageView 是否为 nil,并且如果它只是像您已经添加的那样添加:

if let imageViewLayer = imageView?.layer {
    layer.insertSublayer(layer2!, below: imageViewLayer)
} else {
    layer.insertSublayer(layer2!, at: 0)
}