Set Background Gradient on Button in Swift

前端 未结 10 1261
礼貌的吻别
礼貌的吻别 2020-12-12 21:54

I have no idea how to set the background gradient on a button (without making the background gradient an image). This is so different from Android.

Here\'s a class I

10条回答
  •  北荒
    北荒 (楼主)
    2020-12-12 22:24

    Your code works fine. You just have to remember to set the gradient's frame every time. It is better to just make the gradient category also set the frame of the view for you.

    That way you don't forget and it applies fine.

    import UIKit
    
    extension UIView {
        @discardableResult
        func applyGradient(colours: [UIColor]) -> CAGradientLayer {
            return self.applyGradient(colours: colours, locations: nil)
        }
    
        @discardableResult
        func applyGradient(colours: [UIColor], locations: [NSNumber]?) -> CAGradientLayer {
            let gradient: CAGradientLayer = CAGradientLayer()
            gradient.frame = self.bounds
            gradient.colors = colours.map { $0.cgColor }
            gradient.locations = locations
            self.layer.insertSublayer(gradient, at: 0)
            return gradient
        }
    }
    
    class ViewController: UIViewController {
    
        @IBOutlet weak var btn: UIButton!
    
        override func viewDidLoad() {
            super.viewDidLoad()
    
            self.btn.applyGradient(colours: [.yellow, .blue])
            self.view.applyGradient(colours: [.yellow, .blue, .red], locations: [0.0, 0.5, 1.0])
        }
    
    
    }
    

    Buttons are views. You apply gradients to it the same way you would apply it to any other view.

    Picture Proof:

    Video Proof: https://i.imgur.com/ssDTqPu.mp4

提交回复
热议问题