ios 12之后按钮渐变不起作用(Swift 4.2)

时间:2018-09-18 20:42:51

标签: swift swift4.2

随着ios 12和Swift 4.2的到来,我的代码不再起作用。它曾经是从左到右,从深紫色到浅紫色按钮的渐变。我该如何解决?

// Gives the button gradient values
func setGradientButton(colorOne: UIColor, colorTwo: UIColor, x1: Double, y1: Double, x2: Double, y2: Double) {

    let gradientLayer = CAGradientLayer()
    gradientLayer.frame = bounds
    gradientLayer.colors = [colorOne.cgColor, colorTwo.cgColor]
    gradientLayer.locations = [0.0, 0.0]
    gradientLayer.startPoint = CGPoint(x: x1, y: y1)
    gradientLayer.endPoint = CGPoint(x: x2, y: y2)

    layer.insertSublayer(gradientLayer, at: 0)
}


// Sets UI elements
func setUI(_ label : UILabel, _ button : UIButton) {

    let colorOne = UIColor(red: 119.0 / 255.0, green: 85.0 / 255.0, blue: 254.0 / 255.0, alpha: 100.0)
    let colorTwo = UIColor(red: 177.0 / 255.0, green: 166.0 / 255.0, blue: 251.0 / 255.0, alpha: 100.0)

    button.setGradientButton(colorOne: colorOne, colorTwo: colorTwo, x1: 0.0, y1: 50, x2: 150, y2: 50)
    button.layer.cornerRadius = 4
    button.clipsToBounds = true
}

1 个答案:

答案 0 :(得分:1)

我无法确定为什么以前的代码可以工作,但是我发现您在CAGradientLayer设置中遇到了一些问题。

首先,使用locations数组。根据{{​​3}},此值“ 定义每个渐变光阑的位置”。因此,如果您希望渐变从一种颜色开始到另一种颜色结束,则需要像这样设置locations

gradientLayer.locations = [0.0, 1.0]

另一个问题是startPointendPoint。同样,来自Apple Documentation

  

该点在单位坐标空间中定义,然后在绘制时映射到图层的边界矩形。

因此,您的分数值应该在0.01.0之间。在单位坐标空间中,(0.0, 0.0)是视图的左上角,(1.0, 1.0)是视图的右下角。如果要获得水平渐变,则需要设置类似的点

gradientLayer.startPoint = CGPoint(x: 0, y: 0.5)
gradientLayer.endPoint = CGPoint(x: 1, y: 0.5)

希望它对您有帮助。