Swift4中将渐变色作为UIButton的背景颜色

3

我有一个按钮,想要设置它的背景色渐变。我有三个十六进制值,已将其转换为RGB并在我的代码中编写了三个值,并将所有三个值传递给按钮框架。但是,当我运行应用程序时,按钮的背景色并没有按照我在代码中设置的颜色进行更改。获取三个颜色代码的代码如下:

 let gradientColor = CAGradientLayer()
    gradientColor.frame = loginButton.frame
    let color1 = UIColor(red: 183, green: 46, blue: 79, alpha: 1)
    let color2 = UIColor(red: 232, green: 79, blue: 80, alpha: 1)
    let color3 = UIColor(red: 145, green: 21, blue: 79, alpha: 1)
    gradientColor.colors = [color1,color2,color3]
    self.loginButton.layer.addSublayer(gradientColor)

gradientColor.frame = loginButton.frame 你可能想要使用 gradientColor.frame = loginButton.bounds。同时,UIColor(red:green:blue:alpha:) 的值需在0和1之间。因此,可以使用 UIColor(red: 183/255., green: 46/255., blue: 79/255., alpha: 1)(对于每种颜色都是如此)。 - Larme
按照您的步骤,背景没有改变。@Larme - Hamza
gradientColor.colors需要是一个CGColor数组:https://dev59.com/1GAf5IYBdhLWcg3wsUXT - Larme
它仍然没有得到颜色。@Larme - Hamza
当您进入代码的那部分时,loginButton.frame 的框架是什么?可能是自动布局问题。 - Larme
1个回答

0

试试这个:

@IBOutlet weak var loginButton: UIButton!
func testGradientButton() -> Void {
    let gradientColor = CAGradientLayer()
    gradientColor.frame = loginButton.frame
    gradientColor.colors = [UIColor.blue.cgColor,UIColor.red.withAlphaComponent(1).cgColor]
    self.loginButton.layer.insertSublayer(gradientColor, at: 0)
}

这是结果:

enter image description here

另外请注意:您代码中RGB颜色的值远高于其正常值。请查看控制台日志,可能会打印以下错误:

[Graphics] UIColor创建时组件值远超出预期范围。设置一个断点在UIColorBreakForOutOfRangeColorComponents上进行调试。此消息仅记录一次。

将所有值除以255.0并使用insertSubLayer函数。
let color1 = UIColor(red: 183.0/255.0, green: 46.0/255.0, blue: 79.0/255.0, alpha: 1)
let color2 = UIColor(red: 232.0/255.0, green: 79.0/255.0, blue: 80.0/255.0, alpha: 1)
let color3 = UIColor(red: 145.0/255.0, green: 21.0/255.0, blue: 79.0/255.0, alpha: 1)

这里是您颜色代码值的结果:

func testGradientButton() -> Void {
    let gradientColor = CAGradientLayer()
    gradientColor.frame = loginButton.frame
    let color1 = UIColor(red: 183.0/255.0, green: 46.0/255.0, blue: 79.0/255.0, alpha: 1)
    let color2 = UIColor(red: 232.0/255.0, green: 79.0/255.0, blue: 80.0/255.0, alpha: 1)
    let color3 = UIColor(red: 145.0/255.0, green: 21.0/255.0, blue: 79.0/255.0, alpha: 1)
    gradientColor.colors = [color1.cgColor,color2.cgColor,color3.cgColor]
    self.loginButton.layer.insertSublayer(gradientColor, at: 0)
}

enter image description here


1
它没有获取到颜色。@Krunal - Hamza
它没有覆盖整个按钮背景区域,我已经设置了按钮的圆角半径,但是在应用渐变后,它会移除曲线边缘。@Krunal - Hamza
因为 gradientColor.frame = loginButton.frame 很明显。 - Krunal
仍然无法完全显示按钮,它会在右侧停止,并且在按钮边缘消失。@Krunal - Hamza

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接