从UIColors或NSColors数组创建CGColors数组

El *_*ato 0 cocoa-touch cgcolor ios cagradientlayer swift

我一直在测试CAGradientLayer为iOS和Mac OS X(Cocoa)创建渐变颜色.例如,我有以下代码行来为iOS创建渐变颜色.

let gradient: CAGradientLayer = CAGradientLayer()
gradient.frame = view.bounds
gradient.colors = [UIColor.orangeColor().CGColor,UIColor.redColor().CGColor]
gradient.locations = [0.1,0.9]
self.view.layer.insertSublayer(gradient,atIndex:0)
Run Code Online (Sandbox Code Playgroud)

现在,我所拥有的是一系列颜色(UIColorNSColor),具体取决于开发平台.如果我以编程方式创建一个包含UIColor(或NSColor)对象的数组,则以

var cArray = [UIColor]() 
Run Code Online (Sandbox Code Playgroud)

要么

var cArray = [NSColor]()
Run Code Online (Sandbox Code Playgroud)

,如何创建包含CGColors的数组?我在想这个话题可能是相关的.一个问题是我不知道如何声明和初始化CGColor对象的数组.

谢谢

net*_*ger 5

我还想对这个功能给予map一些关注.

    let colors: [UIColor] = [UIColor.redColor(), UIColor.orangeColor()]
    let cgColors: [CGColor] = colors.map({ $0.CGColor })
Run Code Online (Sandbox Code Playgroud)

map 将闭包应用于数组中的每个元素并返回它.

$0 是闭包的第一个(也是唯一的)参数.

它实际上是一个简写:

    let cgColors: [CGColor] = colors.map({ return $0.CGColor })
Run Code Online (Sandbox Code Playgroud)

这是一个简写:

    let cgColors: [CGColor] = colors.map({
        color: in
        return color.CGColor
    })
Run Code Online (Sandbox Code Playgroud)

这是一个简写:

    let cgColors: [CGColor] = colors.map({
        (color: UIColor) in
        return color.CGColor
    })
Run Code Online (Sandbox Code Playgroud)

  • 它是如何*不相关的?这是CGColor数组的实际创建.无需扩展. (2认同)