在Swift 4中不推荐使用init(colorLiteralRed:,green:,blue:,alpha :)

时间:2017-07-27 21:59:07

标签: uicolor swift4

let startingColorOfGradient = UIColor(colorLiteralRed: 255/255, green: 
255/255, blue: 255/255, alpha: 1.0).cgColor
let endingColorOFGradient = UIColor(colorLiteralRed: 251/255, green: 
247/255, blue: 234/255, alpha: 1.0).cgColor
let gradient: CAGradientLayer = CAGradientLayer()

错误:

  

'init(colorLiteralRed:green:blue:alpha :)'在Swift 4.0中被淘汰(Swift._ExpressibleByColorLiteral)

如果在Swift 4中弃用init(colorLiteralRed:,green:,blue:,alpha:),如何使用渐变色?

4 个答案:

答案 0 :(得分:51)

init(colorLiteralRed:green:blue:alpha:)旨在与由开发工具管理的Color Literals一起使用。

为什么不使用普通init(red:green:blue:alpha:)

let startingColorOfGradient = UIColor(red: 255.0/255.0, green:
    255.0/255.0, blue: 255.0/255.0, alpha: 1.0).cgColor
let endingColorOFGradient = UIColor(red: 251.0/255.0, green:
    247.0/255.0, blue: 234.0/255.0, alpha: 1.0).cgColor
let gradient: CAGradientLayer = CAGradientLayer()

(像234.0/255.0这样的写法不是强制性的,在Swift中的上下文中。但它阻止Swift编译器在其他一些上下文中将234/255解释为整数除法。)

答案 1 :(得分:4)

你可以简单地使用UIColor类的下面方法来实例化红色,绿色,蓝色,Alpha的颜色。

注意:红色,绿色,蓝色和Alpha的值范围为0到1.

let colorStart = UIColor(red:0.1 , green: 0.2, blue: 0.5, alpha: 1.0)
let colorEnd = UIColor(red:0.21 , green: 0.32, blue: 0.15, alpha: 1.0)

func createGradientLayer() {
     gradientLayer = CAGradientLayer()
     gradientLayer.frame = self.view.bounds
     gradientLayer.colors = [colorStart.CGColor, colorEnd.CGColor]
     self.view.layer.addSublayer(gradientLayer)
}

要创建渐变图层,您可以参考

https://www.appcoda.com/cagradientlayer/

答案 2 :(得分:2)

另一种方式:https://developer.apple.com/documentation/uikit/uicolor/1621925-init

  

init(displayP3Red:CGFloat,green:CGFloat,blue:CGFloat,alpha:CGFloat)

     

使用Display P3颜色空间中指定的不透明度和RGB分量值初始化并返回颜色对象。

您可以使用displayP3Red代替colorLiteralRed

let startingColorOfGradient = UIColor(displayP3Red: 255/255, green: 255/255, blue: 255/255, alpha: 1.0).cgColor
let endingColorOFGradient = UIColor(displayP3Red: 251/255, green: 247/255, blue: 234/255, alpha: 1.0).cgColor
let gradient: CAGradientLayer = CAGradientLayer()

答案 3 :(得分:0)

你可以使用

UIColor(red: CGFloat(255.0), green: CGFloat(255.0), blue: CGFloat(255.0), alpha: CGFloat(255.0))