创建带有渐变边框和渐变文字的清晰按钮

OCT*_*IAN 10 uibutton uikit ios swift

我正在尝试为我的UIButton标题和按钮的边框添加渐变。我不确定这里是否已经过了大部分的解决方案,我不确定我可能会过时。因此,目前我扩展了UIView以设置渐变。那么,如何为该功能添加另一个功能?

func setGradientBackground(colorOne: UIColor, colorTwo: UIColor)  {
    let gradientlayer = CAGradientLayer()
    gradientlayer.frame = bounds
    gradientlayer.colors = [colorOne.cgColor, colorTwo.cgColor]
    gradientlayer.locations = [0, 1]
    gradientlayer.startPoint = CGPoint(x: 1.0, y: 0.0)
    gradientlayer.endPoint = CGPoint(x: 0.0, y: 0.0)

    layer.insertSublayer(gradientlayer, at: 0)

}
Run Code Online (Sandbox Code Playgroud)

我想达到的目标的一个例子

Atu*_*mar 16

我已经为您创建了一个演示,您可以在CAGradientLayer查看以下输出和代码的帮助下进行此操作。

在此处输入图片说明

故事板:

在此处输入图片说明

对于渐变按钮的文字颜色和边框,请放在UIButton内部UIView,然后分配CAGradientLayerUIview

注意:-不要忘记将按钮设置为视图蒙版,请参见以下代码。

import UIKit

class ViewController: UIViewController {

    @IBOutlet var viewForButton: UIView!
    @IBOutlet var myButton: UIButton!

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.

        // Create a gradient layer
        let gradient = CAGradientLayer()

        // gradient colors in order which they will visually appear
        gradient.colors = [UIColor.red.cgColor, UIColor.blue.cgColor]

        // Gradient from left to right
        gradient.startPoint = CGPoint(x: 0.0, y: 0.5)
        gradient.endPoint = CGPoint(x: 1.0, y: 0.5)

        // set the gradient layer to the same size as the view
        gradient.frame = viewForButton.bounds

        // add the gradient layer to the views layer for rendering
        viewForButton.layer.insertSublayer(gradient, at: 0)

        // Tha magic! Set the button as the views mask
        viewForButton.mask = myButton

        //Set corner Radius and border Width of button
        myButton.layer.cornerRadius =  myButton.frame.size.height / 2
        myButton.layer.borderWidth = 5.0
    }

}
Run Code Online (Sandbox Code Playgroud)

扩展名:同样,您也可以选择此扩展名。

extension UIView{

    func gradientButton(_ buttonText:String, startColor:UIColor, endColor:UIColor) {

        let button:UIButton = UIButton(frame: self.bounds)
        button.setTitle(buttonText, for: .normal)

        let gradient = CAGradientLayer()
        gradient.colors = [startColor.cgColor, endColor.cgColor]
        gradient.startPoint = CGPoint(x: 0.0, y: 0.5)
        gradient.endPoint = CGPoint(x: 1.0, y: 0.5)
        gradient.frame = self.bounds
        self.layer.insertSublayer(gradient, at: 0)
        self.mask = button

        button.layer.cornerRadius =  button.frame.size.height / 2
        button.layer.borderWidth = 5.0
    }
}
Run Code Online (Sandbox Code Playgroud)

如何使用:

testView.gradientButton("Hello", startColor: .red, endColor: .blue)
Run Code Online (Sandbox Code Playgroud)