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

时间:2016-08-03 16:48:28

标签: swift tuples variadic-functions objective-c-swift-bridge nsgradient

我有一个NSColor的数组,以及一个表示渐变停止的CGFloat数组。我无法弄清楚如何使用这些数组初始化NSGradient

我尝试将这些变成(NSColor, CGFloat) s的数组,但是NSGradient(colorsAndLocations:不会接受它,因为它期望varargs:

The code <code>let gradient = NSGradient(colorsAndLocations: colorsAndLocations)</code> yielding the error <code>Cannot convert value of type '[(NSColor, CGFloat)]' to expected argument type '(NSColor, CGFloat)'</code>

NSGradient(colors:, atLocations:, colorSpace:)期待UnsafePointer我不知道如何在Swift中正确处理,如果有这样的话。

1 个答案:

答案 0 :(得分:1)

我假设您知道这种用法:

[dataArray removeObjectAtIndex:index];

不幸的是,Swift没有为我们提供一种为可变函数提供数组的方法。

第二部分。如果某个API声称let cAndL: [(NSColor, CGFloat)] = [(NSColor.redColor(), 0.0), (NSColor.greenColor(), 1.0)] let gradient = NSGradient(colorsAndLocations: cAndL[0], cAndL[1]) 为数组,则可以创建一个T的Swift数组,并将其直接传递给API。

UnsafePointer<T>

如果您想使用let colors = [NSColor.redColor(), NSColor.greenColor()] let locations: [CGFloat] = [0.0, 1.0] let gradient2 = NSGradient(colors: colors, atLocations: locations, colorSpace: NSColorSpace.genericRGBColorSpace()) ArrayNSColor),可以这样写:

CGFloat
相关问题