Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/102.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 渐变色作为Swift4中UIButton的背景色_Ios_Uibutton_Swift4 - Fatal编程技术网

Ios 渐变色作为Swift4中UIButton的背景色

Ios 渐变色作为Swift4中UIButton的背景色,ios,uibutton,swift4,Ios,Uibutton,Swift4,我有一个按钮,我试图设置它的背景颜色梯度。我有三个十六进制值,我转换成RGB,在我的代码中写了三个值,并将所有三个值传递给按钮框。但是当我运行应用程序按钮时,背景不会根据我在代码中设置的颜色而改变。我得到三种颜色代码的代码是 let gradientColor = CAGradientLayer() gradientColor.frame = loginButton.frame let color1 = UIColor(red: 183, green: 46, blue: 79

我有一个按钮,我试图设置它的背景颜色梯度。我有三个十六进制值,我转换成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)
试试这个,看看:

@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)
}
结果如下:

还要注意:代码中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)
}

gradientColor.frame=loginButton.frame
您可能需要执行
gradientColor.frame=loginButton.bounds
。另外,
UIColor(红色:绿色:蓝色:alpha:)
等待0到1之间的值。因此,
UIColor(红色:183/255,绿色:46/255,蓝色:79/255,alpha:1)
(对于每种颜色,依此类推)它没有改变背景,因为我遵循了你的程序@Larme
gradientColor.color
需要是一个
CGColor
数组,而且:它仍然没有得到颜色。@Larme当您输入这部分代码时,
loginButton.frame
的框架是什么?可能是自动布局问题。它没有颜色@Krunalit并没有覆盖整个按钮背景区域,我已经创建了按钮角半径,但在应用渐变后,它正在删除曲线边。@KRUNALOBISTER是因为
gradientColor.frame=loginButton.frame
仍然没有出现在完整按钮上,它在右端边之前停止,并在按钮边消失@克鲁纳尔