ghrix ghrix
ghrix ghrix

Reputation: 29

Apply Shadow along with the gradient colour with custom class

I write the one custom class for gradient button, I want to apply shadow also for that.

I getting Gradient colour but I don't get the shadow.

Here I think I have issue with self.clipsToBounds = true

find my code with following.

class GradientButton: UIButton {

    let gradientLayer = CAGradientLayer()

    override init(frame: CGRect) {
        super.init(frame: frame)
        commonInit()
    }
    required public init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)
        commonInit()
    }

    func commonInit() -> Void {

        layer.cornerRadius = self.frame.size.height / 2.0
        gradientLayer.locations = [0.0, 1.0]
        // top-right to bottom-left
        gradientLayer.startPoint = CGPoint(x: 0.0, y: 1.0)
        gradientLayer.endPoint = CGPoint(x: 1.0, y: 0.0)

        // we only add the layer once, here when called from init
        layer.addSublayer(gradientLayer)
        self.clipsToBounds = true
    }

    func setGradientBackground(colorOne: UIColor, colorTwo: UIColor) {
        gradientLayer.colors = [colorOne.cgColor, colorTwo.cgColor]
        applyShadow(shadoeclr: colorOne)
    }

    override func layoutSubviews() {
        super.layoutSubviews()
        gradientLayer.frame = bounds
    }

    func applyShadow(shadoeclr:UIColor){
        layer.shadowColor = shadoeclr.cgColor
        layer.shadowRadius = 5
        layer.shadowOpacity = 0.5
        layer.shadowOffset = CGSize(width: 0, height: 0)
    }
}

Upvotes: 0

Views: 86

Answers (1)

abanoub nabil
abanoub nabil

Reputation: 81

try to use masksToBounds instead of clipsToBounds

Upvotes: 1

Related Questions