swift 中在视图和按钮上应用渐变颜色时出现问题

Issue in applying gradient color on view and button in swift

我正在尝试在视图和按钮上应用渐变颜色,但我遇到了一个问题,即它没有应用于整个按钮框架和视图,正如您在 screenshot.I 中看到的那样此代码并给出我自定义的十六进制颜色值,

func applyGradient(colours: [UIColor]) -> Void {
    let gradient: CAGradientLayer = CAGradientLayer()
    gradient.frame = self.bounds
    gradient.colors = colours.map { [=11=].cgColor }
    gradient.startPoint = CGPoint(x : 0.0, y : 0.5)
    gradient.endPoint = CGPoint(x :1.0, y: 1.5)
    self.layer.insertSublayer(gradient, at: 0)
}

并通过调用此函数来应用,

self.headerView.applyGradient(colours: [UIColor.init(hexString: "54F3FF"),UIColor.init(hexString: "43D7FF") ,UIColor.init(hexString: "30B7FF")])

现在,当我 运行 应用程序并对其进行测试时,它看起来像这样

如何将渐变应用到整个视图和按钮的框架?我的代码有什么错误?

试试这个

override func viewDidLayoutSubviews() {
        self.headerView.applyGradient(colours: [UIColor.init(hexString: "54F3FF"),UIColor.init(hexString: "43D7FF") ,UIColor.init(hexString: "30B7FF")])
    }

希望对您有所帮助

@Junaid Khan,

像下面这样尝试,

extension UIView {

    func applyGradient(colours: [CGColor], startPoint: CGPoint, endPoint: CGPoint, frame: CGRect) -> Void {

        let gradientLayer = CAGradientLayer()
        gradientLayer.colors = colours
        gradientLayer.startPoint = startPoint
        gradientLayer.endPoint = endPoint
        gradientLayer.frame = frame
        layer.insertSublayer(gradientLayer, at: 0)
    }
}

如果您使用了约束,那么在您的约束方法中调用如下所示,

DispatchQueue.main.asyncAfter(deadline: .now() + 1.0) {

            yourView?.applyGradient(colours: [UIColor.red.cgColor, UIColor.yellow.cgColor], startPoint: CGPoint(x: 0, y: 1), endPoint: CGPoint(x: 1, y: 1), frame: (yourView?.bounds)!)
        }

希望它能节省您的时间!

注意:您可以使用六色值转换或获取 RGB 颜色。