快速在视图和按钮上应用渐变颜色的问题

时间:2019-09-04 11:33:13

标签: swift colors gradient

我正在尝试在视图和按钮上应用渐变颜色,但是我面临一个问题,即它不能应用于按钮和视图的整个框架,如您在屏幕截图中所见。我自定义的十六进制颜色值,

func applyGradient(colours: [UIColor]) -> Void {
    let gradient: CAGradientLayer = CAGradientLayer()
    gradient.frame = self.bounds
    gradient.colors = colours.map { $0.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")])

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

enter image description here

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

2 个答案:

答案 0 :(得分:1)

尝试一下

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

希望这会有所帮助

答案 1 :(得分:0)

@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颜色。