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 颜色。
我正在尝试在视图和按钮上应用渐变颜色,但我遇到了一个问题,即它没有应用于整个按钮框架和视图,正如您在 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 颜色。