简体   繁体   中英

Swift Button.setText doesn't work with gradient

I'm new in Swift and I have a problem. my button do not set the text if I try to use the gradient. here is my code:

let gradient:CAGradientLayer = CAGradientLayer()
    let colorBottom = UIColor(red: 9/255.0, green: 137/255.0, blue: 133/255.0, alpha: 1.0).CGColor
    let colorTop = UIColor(red: 222.0/255.0, green: 255.0/255.0, blue: 201.0/255.0, alpha: 1.0).CGColor

    gradient.colors = [colorTop, colorBottom]
    gradient.startPoint = CGPoint(x: 0.0, y: 0.5)
    gradient.endPoint = CGPoint(x: 1.0, y: 0.5)
    gradient.frame = LoginButton.bounds
    gradient.cornerRadius = 25.0


    LoginButton.layer.addSublayer(gradient)
    LoginButton.setTitle("Login", forState: UIControlState.Normal)
    LoginButton.setTitleColor(UIColor.blackColor(), forState: .Normal)


    self.view.addSubview(LoginButton)

Adding a sublayer works the same as adding a subview so adding the gradient layer may be covering the other layers where the text is drawn.

If you remove this line does it work?

LoginButton.layer.addSublayer(gradient)

If it does, try seeing how many layers are in LoginButton.layer.sublayers and try inserting the gradient layer behind one of those sublayers (wherever it looks the best) using one of the following methods:

-insertSublayer:above:
-insertSublayer:below:
-insertSublayer:atIndex:

This line is the problem:

LoginButton.layer.addSublayer(gradient)

Do not add any extra layers to a UIButton. It already knows how to draw itself. If you want it to have a gradient background, draw the gradient into an image and set that as the button's background image in the normal way.

Or make the button clear and put the gradient layer behind the button (though this is not as good).

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM