从UIColors或NSColors数组创建CGColors数组

时间:2016-06-02 09:25:38

标签: ios swift cocoa-touch cagradientlayer cgcolor

我一直在测试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)

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

开始
var cArray = [UIColor]() 

var cArray = [NSColor]()

,如何创建包含CGColors的数组?我认为this topic可能是相关的。一个问题是我不知道如何声明和初始化CGColor对象数组。

谢谢

2 个答案:

答案 0 :(得分:5)

我还想对函数map给予一些关注。

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

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

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

它实际上是:

的简写
    let cgColors: [CGColor] = colors.map({ return $0.CGColor })

这是:

的简写
    let cgColors: [CGColor] = colors.map({
        color: in
        return color.CGColor
    })

这是:

的简写
    let cgColors: [CGColor] = colors.map({
        (color: UIColor) in
        return color.CGColor
    })

答案 1 :(得分:2)

你可以这样做:

extension _ArrayType where Generator.Element == UIColor {
    func CGColors() -> [CGColorRef] {
        var cgColorArray: [CGColorRef] = []

        for color in self {
            cgColorArray.append(color.CGColor)
        }

        return cgColorArray
    }
}

像这样使用它:

let colors: [UIColor] = [UIColor.redColor(), UIColor.orangeColor()]
colors.CGColors()

重复NSColor。