如何在swift中将UIView的背景色设置为渐变色?

如何在swift中将UIView的背景色设置为渐变色?,swift,uiview,cagradientlayer,Swift,Uiview,Cagradientlayer,我正在尝试使用以下代码在swift中将我的按钮和标签的颜色设置为渐变色: extension UIView { func setGradientColor(colorOne: UIColor, colorTwo: UIColor) { let gradientLayer = CAGradientLayer() gradientLayer.frame = bounds gradientLayer.colors = [colorOne.cg

我正在尝试使用以下代码在swift中将我的按钮和标签的颜色设置为渐变色:

extension UIView {

    func setGradientColor(colorOne: UIColor, colorTwo: UIColor) {

        let gradientLayer = CAGradientLayer()
        gradientLayer.frame = bounds
        gradientLayer.colors = [colorOne.cgColor, colorTwo.cgColor]
        gradientLayer.locations = [0.0,0.1]
        gradientLayer.startPoint = CGPoint(x: 1.0, y: 1.0)
        gradientLayer.endPoint = CGPoint(x: 0.0, y: 0.0)

        layer.insertSublayer(gradientLayer, at: 0)
   }
}
然后在登录表单中,我使用如下扩展名:

let logo: UILabel = {
    let logo = UILabel()
    logo.text = "Logo"
    logo.setGradientColor(colorOne: UIColor.blue, colorTwo: UIColor.yellow)
    logo.textAlignment = .center
    logo.font = UIFont.boldSystemFont(ofSize: 59)
    return logo
}()
extension UIView {

    @discardableResult
    func setGradietColor(colorOne: UIColor, colorTwo: UIColor) {

        let gradientLayer = CAGradientLayer()
        gradientLayer.frame = bounds
        gradientLayer.colors = [colorOne.cgColor, colorTwo.cgColor]
        gradientLayer.locations = [0.0,0.1]
        gradientLayer.startPoint = CGPoint(x: 1.0, y: 1.0)
        gradientLayer.endPoint = CGPoint(x: 0.0, y: 0.0)

        layer.insertSublayer(gradientLayer, at: 0)
        return layer
   }
}
但它仍然显示为黑色。
我该如何解决这个问题?

你发布的内容我会回顾一下。。。在设置徽标视图的框架或约束后,调用
setGradietColor(colorOne:UIColor.blue,colorTwo:UIColor.yellow)

可以在视图中添加渐变层

let gradient: CAGradientLayer = CAGradientLayer()

        gradient.colors = [UIColor.black.cgColor, UIColor.blue.cgColor]
        gradient.locations = [0.0 , 1.0]
        gradient.startPoint = CGPoint(x : 0.0, y : 0)
        gradient.endPoint = CGPoint(x :0.0, y: 0.5) // you need to play with 0.15 to adjust gradient vertically
        gradient.frame = view.bounds
        view.layer.addSublayer(gradient)

您面临这个问题,因为当
徽标的
边界更新时,您没有更新
gradientLayer的
框架。例如,在ViewController中,如果可以引用您的
gradientLayer
,则可以给出此代码

class ViewController: UIViewController {

    var gradient: CAGradientLayer?

    let logo: UILabel = {
        let logo = UILabel()
        logo.text = "Logo"
        gradient = logo.setGradietColor(colorOne: UIColor.blue, colorTwo: UIColor.yellow)
        logo.textAlignment = .center
        logo.font = UIFont.boldSystemFont(ofSize: 59)
        return logo
    }()

    override func viewDidLayoutSubviews() {
        super.viewDidLayoutSubviews()
        gradient?.frame = logo.bounds
    }
}
尝试从您的方法返回
,并按如下方式修改您的函数:

let logo: UILabel = {
    let logo = UILabel()
    logo.text = "Logo"
    logo.setGradientColor(colorOne: UIColor.blue, colorTwo: UIColor.yellow)
    logo.textAlignment = .center
    logo.font = UIFont.boldSystemFont(ofSize: 59)
    return logo
}()
extension UIView {

    @discardableResult
    func setGradietColor(colorOne: UIColor, colorTwo: UIColor) {

        let gradientLayer = CAGradientLayer()
        gradientLayer.frame = bounds
        gradientLayer.colors = [colorOne.cgColor, colorTwo.cgColor]
        gradientLayer.locations = [0.0,0.1]
        gradientLayer.startPoint = CGPoint(x: 1.0, y: 1.0)
        gradientLayer.endPoint = CGPoint(x: 0.0, y: 0.0)

        layer.insertSublayer(gradientLayer, at: 0)
        return layer
   }
}

这可能有用吗?在哪里添加约束?还是框架?这能回答你的问题吗?