如何从一组颜色和浮点数创建 NSGradient?

How can I create a NSGradient from an array of colors and floats?

我有一个 NSColor 数组和一个 CGFloat 数组,表示渐变停止。我不知道如何使用这些数组来初始化 NSGradient.

我试着把它们做成一个 (NSColor, CGFloat) 的数组,但是 NSGradient(colorsAndLocations: 不会接受它,因为它需要可变参数:

NSGradient(colors:, atLocations:, colorSpace:) 需要一个 UnsafePointer,我不知道如何在 Swift 中正确处理,如果有这样的方法的话。

我假设你知道这个用法:

let cAndL: [(NSColor, CGFloat)] = [(NSColor.redColor(), 0.0), (NSColor.greenColor(), 1.0)]
let gradient = NSGradient(colorsAndLocations: cAndL[0], cAndL[1])

不幸的是,Swift 没有为我们提供将数组赋予可变参数函数的方法。


还有第二部分。如果一些API声称UnsafePointer<T>是一个数组,你可以创建一个Swift数组T,并直接传递给API。

let colors = [NSColor.redColor(), NSColor.greenColor()]
let locations: [CGFloat] = [0.0, 1.0]
let gradient2 = NSGradient(colors: colors, atLocations: locations, colorSpace: NSColorSpace.genericRGBColorSpace())

如果你想利用一个Array of (NSColor, CGFloat),你可以这样写:

let gradient3 = NSGradient(colors: cAndL.map{[=12=].0}, atLocations: cAndL.map{[=12=].1}, colorSpace: NSColorSpace.genericRGBColorSpace())